• 2017 Multi-University Training Contest


    ---恢复内容开始---

    rank:77/758

    1001 Rikka with Candies

    因为没有手写bitset被卡了一下,最后过了。

    #include <bits/stdc++.h>
    const long long mod = 1e9+7;
    const double ex = 1e-10;
    #define inf 0x3f3f3f3f
    using namespace std;
    typedef pair<int,int>  pii;
    bitset<50005> A;
    bitset<50005> B;
    bitset<50005> an;
    vector <pii> E;
    int ans[50005];
    int ansid[50005];
    int main()
    {
        int t;
        scanf("%d",&t);
        int c;
        int maxa;
        while (t--){
            int N,M,Q;
            scanf("%d%d%d",&N,&M,&Q);
            A.reset();
            B.reset();
            maxa = 0;
            for (int i = 1; i<=N; i++){
                scanf("%d",&c);
                A[c] = 1;
                maxa = max(maxa,c);
            }
            E.clear();
            for (int i = 0; i<=maxa ;i++) ans[i] = -1;
    
            for (int i = 1;i<=M; i++){
                scanf("%d",&c);
                E.push_back(make_pair(c,-1));
            }
    
    
            for (int i = 1;i<=Q;i++){
                scanf("%d",&c);
                E.push_back(pii(c,i));
            }
            sort(E.begin(),E.end());
            for (int i = E.size()-1 ; i>=0; i--)
            {
                c = E[i].first;
                if (E[i].second == -1){
                for (int j = 0;j<=maxa;j+=c)
                    B[j] = !B[j];
                }
                else{
                    int id = E[i].second;
                    if (c>maxa) ansid[id] = 0;
                    else{
                        if (ans[c]!=-1) ansid[id] = ans[c];
                        else
                        {
                          an = (A>>c)&(B);
                          ans[c] = (an.count()) % 2;
                          ansid[id] = ans[c];
                        }
                    }
                }
            }
            for (int i = 1;i<=Q;i++)
                printf("%d
    ",ansid[i]);
        }
        return 0;
    }
    View Code

    1006

    贪心构造

    #include <bits/stdc++.h>
    using namespace std;
    int T;
    long long n,m;
    int main()
    {
        scanf("%d",&T);
        while (T--) {
            scanf("%I64d%I64d",&n,&m);
            if (n==1) {
                puts("0");
                continue;
            }
            if (n==2) {
                puts("2");
                continue;
            }
            if (m<n-1) {
                printf("%I64d
    ",2LL*m+2LL*m*(m-1)+(n*(n-1)-2LL*m-m*(m-1))*n);
            } else if (m<n*(n-1)/2) {
                printf("%I64d
    ",2LL*m+(n*(n-1)-2*m)*2LL);
            } else {
                printf("%I64d
    ",n*(n-1));
            }
        }
        return 0;
    }
    View Code

    1008

    枚举,反向考虑每个元素对之后的贡献。

    #include <bits/stdc++.h>
    const long long mod = 1e9+7;
    const double ex = 1e-10;
    #define inf 0x3f3f3f3f
    using namespace std;
    long long M[10005];
    long long TM[10005];
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            int n,m;
            scanf("%d%d",&n,&m);
            for (int i = 0; i<=m; i++)
                 TM[i] = 0;
            for (int i= 0; i<=m;i++)
            {
                long long z;
                scanf("%I64d",&z);
                M[i] = z;
            }
            int tmp = 0;
            TM[0] = 1;
            for (int i = 1; i<=n ;){
                if (M[tmp]>TM[tmp])
                {
                    printf("%d%c",tmp,i==n?'
    ':' ');
                    for (int j = m; j>=0;j--){
                        TM[j+tmp] = TM[j+tmp] + TM[j];
                    }
                    i++;
                }
                else
                {
                    tmp++;
                }
            }
        }
        return 0;
    }
    View Code

    1011

    倒着递推一波即可。

    #include <bits/stdc++.h>
    #define maxn 100010
    #define inf 0x3f3f3f3f
    #define REP(i,x,y) for(int i=x;i<(y);i++)
    #define RREP(i,x,y) for(int i=x;i>(y);i--)
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    int n,k,a[maxn],win[maxn];
    set<int>S;
    int main()
    {
        int T;scanf("%d",&T);
        while(T--) {
            S.clear();
            memset(win,0,sizeof(win));
            scanf("%d %d",&n,&k);
            REP(i,1,n+1) {
                scanf("%d",&a[i]);
            }
            sort(a+1,a+1+n);
            int ans=1;
            win[n]=1;
            RREP(i,n-1,0) {
                if(win[i+1]==1&&a[i+1]-a[i]<=k) {
                    win[i]=1;
                    ans++;
                }
            }
            cout<<ans<<endl;
        }
    }
    View Code
  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/myhappinessisall/p/7325729.html
Copyright © 2020-2023  润新知