zoukankan      html  css  js  c++  java
  • Codeforces Round #461 (Div. 2)

    A:sb题,多特判几下就好了

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    
    int main()
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(y==1)
        {
            if(x!=0)puts("No");
            else puts("Yes");
            return 0;
        }
        if(x>=y-1&&(x-y+1)%2==0&&y!=0)puts("Yes");
        else puts("No");
        return 0;
    }
    /********************
    
    ********************/
    A

    B:n^2模拟

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    
    int main()
    {
        int n,ans=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            for(int j=i;j<=n;j++)
            {
                int te=i^j;
                if(j<=te&&te<=n&&i+j>te&&i+te>j&&j+te>i)ans++;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    /********************
    
    ********************/
    B

    C:找从1到k中,有没有n%i相同的情况

    直接暴力,因为打表出来的结果k不超过15

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    map<ll,ll>vis;
    int main()
    {
        ll n,k;
        scanf("%lld%lld",&n,&k);
    //    if(k>=n)puts("No");
    //    else
        {
            bool ok=1;
            for(ll i=1;i<=k;i++)
            {
                if(vis[n%i])
                {
                    ok=0;
                    break;
                }
                else vis[n%i]=1;
            }
            if(ok)puts("Yes");
            else puts("No");
        }
        return 0;
    }
    /********************
    
    ********************/
    C

    D:给n个字符串,要求重拍后组成的字符串,价值最大,价值是满足i<j,s[i]=='s'&&s[j]=='h'的对数

    做法:直接sort,判断条件是前后组合一下,看那种情况的价值最大,求价值直接后缀和h,扫一遍遇到s就加上后缀,复杂度O(nlogn)

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=100000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    map<ll,ll>vis;
    int main()
    {
        ll n,k;
        scanf("%lld%lld",&n,&k);
    //    if(k>=n)puts("No");
    //    else
        {
            bool ok=1;
            for(ll i=1;i<=k;i++)
            {
                if(vis[n%i])
                {
                    ok=0;
                    break;
                }
                else vis[n%i]=1;
            }
            if(ok)puts("Yes");
            else puts("No");
        }
        return 0;
    }
    /********************
    
    ********************/
    D

    E:n颗数,每个树ci个鸟,从1开始依次移动,每次可以召唤1<=i<=ci只鸟,每召唤一只鸟需要costi法力值,每召唤一只鸟法力值上限加上b,每移到一颗树法力加x,要求找到最大能召唤的鸟个数

    做法:dp[i][j]维护的是当访问到第i颗树时,召唤了j只鸟的当前最大法力值,初始状态dp[0][0]=w,转移方程dp[i][j]=max(dp[i][j],min(dp[i-1][j-k]+x,w+(j-k)*b)-cost[i]*k)

    最后dp[n]里最大能访问到的地方就是答案

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=1000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    ll dp[N][10000+10];
    ll c[N],cost[N];
    int main()
    {
        ll n,w,b,x,sum=0;
        scanf("%lld%lld%lld%lld",&n,&w,&b,&x);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&c[i]);
            sum+=c[i];
        }
        for(int i=1;i<=n;i++)scanf("%lld",&cost[i]);
        memset(dp,-1,sizeof dp);
        dp[0][0]=w;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=sum;j++)
            {
                for(int k=0;k<=min((ll)j,c[i]);k++)
                {
                    if(dp[i-1][j-k]==-1)continue;
    //                if(min(dp[i-1][j-k]+x,w+b*(j-k))-cost[i]*k<0)continue;
                    dp[i][j]=max(dp[i][j],min(dp[i-1][j-k]+x,w+b*(j-k))-cost[i]*k);
                }
            }
        }
        int ans=0;
        while(ans+1<=sum&&dp[n][ans+1]!=-1)ans++;
        printf("%d
    ",ans);
        return 0;
    }
    /********************
    
    ********************/
    E

    F:给你n,k要求构造一个集合,满足集合里所有数不超过n,没有重复,满足倍数关系的对数有k对

    做法:先求出1到n的满足倍数关系的对数e[i],如果e[n]<k,则1到n每个都有也不能满足条件输出no,否则yes,贪心的在1到n删数来满足条件,从1到n每次删除之后在对应的倍数因子数d[i]减一(至于这样贪心为什么能满足条件,我也不会证明,直觉上可以),复杂度O(nlogn)

    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pii pair<int,int>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    
    const double g=10.0,eps=1e-9;
    const int N=300000+10,maxn=3000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
    
    int d[N],e[N];
    int main()
    {
        int n,k;
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++)
            for(int j=2*i;j<=n;j+=i)
                d[j]++;
        for(int i=1;i<=n;i++)e[i]=e[i-1]+d[i];
        if(e[n]<k)puts("No");
        else
        {
            vector<int>ans;
            int te=e[n]-k;
            for(int i=1;i<=n;i++)
            {
                if(te>=d[i]+n/i-1&&d[i]==1)
                {
                    te-=d[i]+n/i-1;
                    for(int j=2*i;j<=n;j+=i)d[j]--;
                }
                else ans.pb(i);
            }
            sort(ans.begin(),ans.end());
            puts("Yes");
            printf("%d
    ",ans.size());
            for(int i=0;i<ans.size();i++)printf("%d ",ans[i]);
            puts("");
        }
        return 0;
    }
    /********************
    
    ********************/
    F
  • 相关阅读:
    sqlserver 游标格式 东师理想
    java流下载 东师理想
    列出所有K个元素的子集2013年1月26日
    你刚才在淘宝上买了一件东西【技术普及贴】(转载)
    递归统计项目中的非空白代码行数
    算法(数据结构)每天一题 2013年1月21日
    《TCP/IP详解卷1》学习小结(二)Internet Protocol
    产生所有排列字典顺序2013年1月23日
    产生所有排列旋转法2013年1月22日
    《TCP/IP详解卷1》学习小结(三)ARP协议与RARP协议
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/8496686.html
Copyright © 2011-2022 走看看