当前位置 博文首页 > 文章内容

    Codeforces Round #665 (Div. 2)A-C题解

    作者: 栏目:未分类 时间:2020-08-22 16:01:12

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    A. Distance and Axis

    题目:http://codeforces.com/contest/1401/problem/A

    题解:对于n来说分两种情况,一是奇数,二则是偶数

    ①奇数:对于k来说如果是奇数且小于等于他,ans=0;若k是奇数并且大于n,则ans=k-n;若k是偶数并且k<n,那么ans=1;若k为偶数并且k>n,则ans=k-n

    ②偶数:若k为偶数并且k<=n,则ans=0;若k为偶数并且k>n,则ans=k-n;若k为奇数并且k<n,则ans=1;若k为奇数并且k>n,则ans=k-n

    代码:

    #include<bits/stdc++.h>    //POJ不支持
    #define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
    #define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
    #define fi first
    #define se second
    #define mp make_pair
    
    using namespace std;
    
    const int inf = 0x3f3f3f3f;//无穷大
    //const int maxn = ;//最大值。
    typedef long long ll;
    typedef long double ld;
    typedef pair<ll, ll>  pll;
    typedef pair<int, int> pii;
    
    int main()
    {
        IOS;
        ll t,n,k;
        cin>>t;
        while(t--)
        {
            cin>>n>>k;
            if(n%2==0)
            {
                if(k%2==0&&k<=n)
                    cout<<"0"<<endl;
                else if(k%2==0&&k>n)
                    cout<<k-n<<endl;
                else if(k%2==1&&k<n)
                    cout<<"1"<<endl;
                else if(k%2==1&&k>n)
                    cout<<k-n<<endl;
            }
            else
            {
                if(k%2==0&&k<n)
                    cout<<"1"<<endl;
                else if(k%2==0&&k>n)
                    cout<<k-n<<endl;
                else if(k%2==1&&k<=n)
                    cout<<"0"<<endl;
                else if(k%2==1&&k>n)
                    cout<<k-n<<endl;
            }
        }
        return 0;
    }

    B. Ternary Sequence

    题目:http://codeforces.com/contest/1401/problem/B

    题解:若想最大,只有让尽可能多的a数组中的2去匹对b数组中的1,这样就都是正的。但也会存在负数,如何才能达到最大化呢?一道典型的贪心思路问题

    首先判断a中2的个数是否大于b中1的个数

    若大于b中1的个数,ans=2*y2,在判断a中0的个数和剩下的2的个数是否大于b数组中2的个数,若大于,答案还是ans;若小于,则b数组中剩下的2的个数将要和a数组中的1的个数进行配对,产生负数,则ans-=2*z2

    若小于b中的1的个数,ans=2*z1,然后判断a中0的个数是否大于b中2的个数,若大于,答案就是ans;若小于,则b数组中剩下的2的个数将要和a数组中1的个数进行配对,产生负数,则ans-=2*z2

    代码:

    #include<bits/stdc++.h>    //POJ不支持
    #define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
    #define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
    #define fi first
    #define se second
    #define mp make_pair
    
    using namespace std;
    
    const int inf = 0x3f3f3f3f;//无穷大
    //const int maxn = ;//最大值。
    typedef long long ll;
    typedef long double ld;
    typedef pair<ll, ll>  pll;
    typedef pair<int, int> pii;
    
    
    int main()
    {
        IOS;
        ll t,x1,x2,y1,y2,z1,z2;
        cin>>t;
        while(t--)
        {
            cin>>x1>>y1>>z1;
            cin>>x2>>y2>>z2;
            ll ans=0;
            if(z1>=y2)
            {
                ans+=2*y2;
                z1-=y2;
                if(x1+z1<z2)
                {
                    z2=z2-(x1+z1);
                    ans-=2*z2;
                }
            }
            else
            {
                ans+=2*z1;
                if(x1<z2)
                {
                    z2-=x1;
                    ans-=z2*2;
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }

    C. Mere Array

    题目:http://codeforces.com/contest/1401/problem/C

    题解:用两个数组来判断,其一数组来记录数字,另一数组排序形成最终的答案数组。

    然后我们理解一下,第i个第j个数交换位置,相当于第i个数先和最小数交换,然后最小数在和第j个数交换。因此,从头到尾对比两个数组,如果数字不一致,判断原来数组是否整除最小数,如果不能整除代表此位置不能交换,因而不会形成最终的不递减数组。

    代码:

    #include<bits/stdc++.h>    //POJ不支持
    #define rep(i,a,n) for (int i=a;i<=n;i++)//i为循环变量,a为初始值,n为界限值,递增
    #define per(i,a,n) for (int i=a;i>=n;i--)//i为循环变量, a为初始值,n为界限值,递减。
    #define pb push_back
    #define IOS ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
    #define fi first
    #define se second
    #define mp make_pair
    
    using namespace std;
    
    const int inf = 0x3f3f3f3f;//无穷大
    const int maxn = 100010;//最大值。
    typedef long long ll;
    typedef long double ld;
    typedef pair<ll, ll>  pll;
    typedef pair<int, int> pii;
    
    ll gcd(ll a,ll b)
    {
        return b?gcd(b,a%b):a;
    }
    ll a[maxn],b[maxn];
    int main()
    {
        IOS;
        int t,i,j,n,tmp;
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(i=0;i<n;i++)
            {
                cin>>a[i];
                b[i]=a[i];
            }
            sort(a,a+n);
            bool flag=false;
            for(i=0;i<n;i++)
            {
                if(a[i]!=b[i])
                {
                    if(b[i]%a[0]!=0)
                    {
                        flag=true;
                        break;
                    }
                }
            }
            if(flag==true)
                cout<<"NO"<<endl;
            else
                cout<<"YES"<<endl;
        }
        return 0;
    }