zoukankan      html  css  js  c++  java
  • Codeforces Round #697 (Div. 3)(A->C)

    A:http://codeforces.com/contest/1475/problem/A

    题意:

    判断n是否有>1的奇数因子

    解析:

    不断比2即可。

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    const int maxn  = 3e5+50;
    const int inf=99999999;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            ll n;
            cin>>n;
            if(n==2)
                cout<<"NO"<<endl;
            else if(n%2!=0)
                cout<<"YES"<<endl;
            else 
            {
                int ok = 0;
                while(n)
                {    
                    ll md=n/2;            
                    if(md%2!=0&&md>1)
                    {
                        ok=1;break;
                    }
                    n=n/2;
                }
                if(n==1)
                    cout<<"NO"<<endl;
                else if(ok)
                    cout<<"YES"<<endl;
                else
                    cout<<"NO"<<endl;
            }
        }
        return 0;    
    }
    //ababab

    B:http://codeforces.com/contest/1475/problem/B

    题意:

    判断一个数是否由若干个2020和2021组成

    解析:

    若n符合,为:2020x+2021y==n

    而2021==2020+1

    则:2020g+j==n

    这个j一定是<=g的

    写麻烦了。。。暴力跑了,但是时间还算过得去

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    const int maxn  = 3e5+50;
    const int inf=99999999;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n ; 
            cin>>n;
            int ok  = 0;
            for(int i=1;i<=500;i++)
            {
                if(i*2020<=n)
                {
                    int md=n-i*2020;
                    if(md<=i)
                    {
                        ok=1;break;
                    }
                }
            }
            if(ok)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;    
    }
    //ababab

    C:http://codeforces.com/contest/1475/problem/C

    题意:

    有a位男士和b位女士参加舞会,有k对关系,表示两个人可以共舞。然后要取出四个人,组成两支舞队,有几种方式

    解析:

    开俩vector v1[],v2[]

    v1[a]=b表示男士a可与b跳舞

    v2[b]=a表示女士b可与a跳舞

    那么遍历每一对关系,若a与b可跳舞,那么v1[a].size即为与a有关的对数,v2[b].size即为与b有关的对数,v1[a].size+v2[b].size-1即为与a-b对冲突的对数(-1的原因是本身a-b算一对合法)。k-它们即为可选对数。

    结尾记得比2

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<cmath>
    #include<map>
    using namespace std;
    const int maxn  = 2e5+50;
    const int inf=99999999;
    typedef long long ll;
    int vv1[maxn],vv2[maxn];
    vector<int>v1[maxn];
    vector<int>v2[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
    
            int a,b,k;
            cin>>a>>b>>k;
            for(int i=1;i<=a;i++) v1[i].clear();
            for(int i=1;i<=b;i++) v2[i].clear();
            for(int i=1;i<=k;i++)
            {
                cin>>vv1[i];
            }
            for(int i=1;i<=k;i++)
            {
                cin>>vv2[i];
                v1[vv1[i]].push_back(vv2[i]);
                v2[vv2[i]].push_back((vv1[i]));
            }
            ll ans = 0 ; 
            for(int i=1;i<=k;i++)
            {
                ans+=k-(v1[vv1[i]].size()+v2[vv2[i]].size()-1);
            }
            cout<<ans/2<<endl;
        }
        return 0;    
    }
    //ababab
  • 相关阅读:
    《将才》读后感
    存储过程
    frame间传值
    IBM TSM解决方案的技术优势
    通过ISA发布Sharepoint 2007的两种认证方式
    ISA Server 2006新功能(1)
    MetaWeblogAPI C# Code Sample
    客户域环境维护记录
    春运教训
    1明
  • 原文地址:https://www.cnblogs.com/liyexin/p/14337755.html
Copyright © 2011-2022 走看看