Codeforces Round #629 (Div. 3)

Codeforces Round #629 (Div. 3)

A. Divisibility Problem

签到题。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
    ll a,b;cin>>a>>b;
    if(a%b==0) cout<<"0\n";
    else cout<<b*(a/b+1)-a<<"\n";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

B. K-th Beautiful String

只移动第一个b后发现相邻两个名次之差为等差数列。

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n,k;cin>>n>>k;
    int l=n-2;
    int sum=1,step=1;
    while(sum+step<=k){
        sum+=step++;
        --l;
    }
    k-=sum;
    string s=string(n,'a');
    s[l]=s[n-1-k]='b';
    cout<<s<<"\n";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

C. Ternary XOR

出现分歧时较大者不再取数。

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n;cin>>n;
    string s;cin>>s;
    string s1,s2;
    bool flag=true;
    for(char c:s){
        if(c=='2'){
            if(flag){
                s1+='1';
                s2+='1';
            }else{
                s1+='0';
                s2+='2';
            }
        }else if(c=='1'){
            if(flag){
                s1+='1';
                s2+='0';
                flag=false;
            }else{
                s1+='0';
                s2+='1';
            }
        }else{
            s1+='0';
            s2+='0';
        }
    }
    cout<<s1<<"\n"<<s2<<"\n";
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

D. Carousel

分情况讨论。

#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n;cin>>n;
    int a[n];for(int &i:a) cin>>i;
    int res[n]={};
    bool same=true;
    for(int i=1;i<n;i++) if(a[i]!=a[i-1]) same=false;
    if(same){
        fill(res,res+n,1);
    }else if(n%2==0){
        for(int i=0;i<n;i++) res[i]=(i&1?1:2);
    }else{
        for(int i=0;i<n;i++){
            if(a[i]==a[(i+1)%n]){
                for(int j=i-1;j>=0;j--) res[j]=(j&1?1:2);
                for(int j=i+2;j<n;j++) res[j]=(j&1?2:1);
                res[i]=res[(i+1)%n]=(i&1?1:2);
                break;
            }
        }
    }
    if(res[0]==0){
        res[0]=3;
        for(int i=1;i<n;i++) res[i]=(i&1?1:2);
    }
    cout<<*max_element(res,res+n)<<"\n";
    for(int i=0;i<n;i++) cout<<res[i]<<" \n"[i==n-1];
}
int main()
{
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/Kanoon/p/12578790.html
今日推荐