Codeforces Round #629

A. Divisibility Problem

题目
题意:a每次加1,问a加多少次就可以整除以b
思路:若a可以整除以b,输出0;否则输出(a/b+1)*b-a;

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
    int q;
    cin>>q;
    while(q--)
    {
        ll a,b;
        cin>>a>>b;
        if(a%b==0)
            cout<<'0'<<endl;
        else
        {
            ll r=a/b;
            r=(r+1)*b-a;
            cout<<r<<endl;
        }
    }
    return 0;
}

B. K-th Beautiful String

题目
题意:n-2个a,2个b,将字符串进行全排列,求第k个字符串
思路:只需要找出两个b的位置。
第一个b的位置:第一个有一个,第二个有两个,第三个有三个、、、计算累加到大于k的时候是的几个,可以算出第一个b的位置;
第二个b的位置:多出来第几个就是,倒数第几个

#include <iostream>
using namespace std;
typedef long long ll;
const int M=2e5+5;
ll a[100000];

int main()
{
    a[0]=0;
    int q;
    cin>>q;
    while(q--)
    {
        int n;
        int k,i;
        cin>>n>>k;
        int l,r;
        for(i=1; a[i-1]<=2e9; i++)
        {
            a[i]=a[i-1]+i;
            if(a[i]>=k)
            {
                l=n-i;
                r=n-(k-a[i-1])+1;
                break;
            }
        }
        for(i=1;i<=n;i++)
        {
            if(i==l||i==r)
                cout<<'b';
            else cout<<'a';
        }
        cout<<endl;
    }
    return 0;
}

C. Ternary XOR

题目
题意:两个数组每一位相加后对三取余,得到的最后的数组为给出的数组,求最小的这样的两个数组。
思路:根据给出的数组求结果
若为0都为0,若为2都为1
若为1,则其中一个数组为1后以后不管遇到什么都为0,另一数组遇谁为谁,可保证数组最小。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int M=5e4+5;
int main()
{
    int q;
    cin>>q;
    while(q--)
    {
        int n,i;
        cin>>n;
        int a[M],b[M],d[M];
        bool flag=true;
        for(i=0; i<n; i++)
        {
            char ch;
            cin>>ch;
            a[i]=ch-'0';
            if(flag)
            {
                if(a[i]==1)
                {
                    b[i]=1;
                    d[i]=0;
                    flag=false;
                }
                else if(a[i]==2)
                {
                    b[i]=d[i]=1;
                }
                else if(a[i]==0)
                {
                    b[i]=d[i]=0;
                }
            }
            else
            {
                if(a[i]==1)
                {
                    b[i]=0;
                    d[i]=1;
                }
                else if(a[i]==2)
                {
                    b[i]=0;
                    d[i]=2;
                }
                else if(a[i]==0)
                    b[i]=d[i]=0;
            }
        }
        for(i=0; i<n; i++)
            cout<<b[i];
        cout<<endl;
        for(i=0; i<n; i++)
            cout<<d[i];
        cout<<endl;

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44350170/article/details/105420788