Codeforces Round #604解题报告

2022-08-15 12:32:34 浏览数 (2)

突然想更博呗

rk553 rating 35 一边打一边看学弟改的稿子233 有点小炸 下辈子再也不倒开了.jpg

A: Beautiful String

题目链接 题意:希望构造一个邻位不相同的只有abc的字符串 给定一个带有’?’的串 ‘?’可以任意替换为abc 问能不能构造出符合要求的串 一开始被卡了一下

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define sc(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e5   5;
char s[maxn];
int solve(){
    scs(s); int len=strlen(s);
    if(s[0]=='?'&&s[1]!='a') s[0]='a';
    else if(s[0]=='?') s[0]='b';
    if(s[len-1]=='?'&&s[len-2]!='a') s[len-1]='a';
    else if(s[len-1]=='?') s[len-1]='b';
    rep(i,1,len-1) if(s[i]=='?'){
        if(s[i-1]=='a'){
            if(s[i 1]!='b') s[i]='b';
            else s[i]='c';
        }
        else{
            if(s[i 1]!='a') s[i]='a';
            else if(s[i-1]=='b') s[i]='c';
            else s[i]='b';
        }
    }
    rep(i,1,len) if(s[i-1]==s[i]) return puts("-1");
    pf("%sn",s); return 0;
}
int main(){
    int _; sc(_); while(_--) solve();
}

B: Beautiful Numbers

题目链接 题意:给定n和初始序列 问在1到n中的i有哪些满足在初始序列中存在区间长度为i且区间内只有1-i的数 真好写啊 我为什么不先写B 判一下左右就行 写得复杂了一点

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define sc(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5   5;
int a[maxn],ans[maxn];
pii p[maxn];
int solve(){
    int n,pos; sc(n); rep(i,1,n 1){
        sc(a[i]); p[i].first=a[i]; p[i].second=i;
    } sort(p 1,p n 1); ans[1]=1;
    int l=1e9,r=0; rep(i,1,n 1){
        l=min(l,p[i].second);
        r=max(r,p[i].second);
        if(r-l>=i) ans[i]=0;
        else if(r-l<i) ans[i]=1;
        else ans[i]=0;
    }
    rep(i,1,n 1) pf("%d",ans[i]);
    pf("n");
}
int main(){
    int _; sc(_); while(_--) solve();
}

C: Beautiful Regional Contest

题目链接 题意:分金银铜牌 规则是获得金牌的人题数严格大于得银牌的 银牌的严格大于铜牌的 金牌数严格小于银牌数和铜牌数 三个牌子的总和不多于总人数的一半 给定人数和过题数 希望牌子尽量多 输出方案 贪心 金牌只取最多过题数的人数 银牌取到比金牌多就break 铜剩下 判是否符合要求

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6   5;
int a[maxn],vis[maxn];
int main(){
    int _; sc(_); while(_--){
        int n,a0; sc(n); sc(a0);
        rep(i,0,a0 1) vis[i]=0; a[1]=a0; vis[a0]  ;
        rep(i,2,n 1) sc(a[i]),vis[a[i]]  ;
        int mid=n/2;
        if(a[mid]==a[mid 1]){
            while(a[mid]==a[mid 1]) mid--;
        }
        int aa,b=0,c=0; aa=vis[a0];
        dep(i,a0-1,0) if(vis[i]){
            b =vis[i]; if(b>aa) break;
        }
        if(b<=aa||aa b>=mid){
            pf("0 0 0n"); continue;
        } c=mid-aa-b;
        if(c<=aa){
            pf("0 0 0n"); continue;
        }
        pf("%d %d %dn",aa,b,c);
    }
}

D: Beautiful Sequence

题目链接 题意:给abcd四个数 代表有a个0 b个1 c个2 d个3 问能不能构成相邻位差值绝对值为1的序列 本来以为是细节题 思维还是不够缜密很多请况没考虑到233 看了dls代码 写的是按题意模拟 真好看啊 wxhtxdytxdy

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5   5;
int a[5],b[5];
vector<int>vv; 
int main(){
    rep(i,0,4) sc(a[i]);
    rep(i,0,4){
        rep(j,0,4) b[j]=a[j];
        if(!b[i]) continue; int x=i; 
        vv.clear(); while(1){
            vv.push_back(x); b[x]--;
            if(x&&b[x-1]) x--;
            else if(x!=3&&b[x 1]) x  ;
            else break;
        }
        if(!b[0]&&!b[1]&&!b[2]&&!b[3]){
            pf("YESn");
            rep(i,0,vv.size()) pf("%d ",vv[i]);
            return pf("n"),0;
        }
    } return pf("NOn"),0;
}

E: Beautiful Mirrors

题目链接 文字先咕了 好困 随缘更

代码语言:javascript复制
#include<bits/stdc  .h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e;   i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5   5;
const int mod = 998244353;
ll qpow(ll a,ll b){
    ll ans=1; while(b){
        if(b&1) ans=ans*a%mod;
        b>>=1; a=a*a%mod;
    } return ans;
}
ll a[maxn],q1[maxn],q2[maxn];
int main(){
    int n; sc(n); rep(i,0,n) scl(a[i]);
    ll t=qpow(100,mod-2); q1[n]=q2[n]=0;
    dep(i,n-1,0){
        q1[i]=a[i]*t%mod*q1[i 1]%mod;
        q1[i]  ; q1[i]%=mod;
        q2[i]=a[i]*t%mod*q2[i 1]%mod;
        q2[i] =t*(100-a[i])%mod; q2[i]%=mod;
    }
    ll ans=q1[0]*qpow((1-q2[0] mod)%mod,mod-2)%mod;
    pf("%lldn",ans);
}

0 人点赞