赛后总结+部分题解2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

Posted tangent-1231

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了赛后总结+部分题解2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛相关的知识,希望对你有一定的参考价值。

赛后总结:

  T:今天状态一般,甚至有点疲惫。然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂。然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007。看了一会发现这是一个简单签到题,构造一下就完事了。然后一遍A,结束。在他们看1008的时候,我回去看1002和1003,1002的题意没看清楚,队友说的也有点模糊,然后不知道怎么下手。开始看1003,因为A的人真的好多呜呜呜。从AC自动机一直re转为后缀自动机,然后不会。结束了。今天对队伍的贡献太少了,复杂度也没算好,一直在re。做题策略还是有点问题,不该纠结自己不会的领域。然后也有很多不会的知识需要去弥补。

 

 

部分题解:

1001 ^&^

技术图片
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9 + 7;
const int maxn = 1e6 + 10;

int main()

    ll a, b, c, k, cnt;
    int t;
    cin >> t;
    k = 1;
    while (t--)
    
        c = 0, k = 1, cnt = 0;
        scanf("%lld%lld", &a, &b);
        int flag = 1;
        while (a || b)
        
            if (a & 1 && b & 1)
            
                c += k;
            
            else if ((a & 1) + (b & 1) == 1 && flag)
            
                flag = 0, cnt = k;
            
            a >>= 1, b >>= 1;
            k <<= 1;
        
        if (!c) c = cnt == 0 ? 1 : cnt;
        printf("%lld\n", c);
    
View Code

1006 Shuffle Card

技术图片
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
#include<fstream>
#include<iomanip>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+10;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
const double PI = acos(-1.0);
int a[maxn];
int b[maxn];
map<int,int> ma;
int main()
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%d",a+i);
    for(int i=0;i<m;i++)
        scanf("%d",b+i);
    for(int i=m-1;i>=0;i--)
        if(ma[b[i]])
            b[i]=0;
        else
            ma[b[i]]=1;
    
    int sum=0;
    for(int i=m-1;i>=0;i--)
        if(b[i]!=0)
            printf("%d ",b[i]);
            sum++;
        
        if(sum==n)
            break;
    
    if(sum!=n)
        for(int i=0;i<n;i++)
            if(!ma[a[i]])
                printf("%d ",a[i]);
                sum++;
            
            if(sum==n)
                break;
        
    
    return 0;
View Code

1007 Windows of CCPC

技术图片
#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9+7;
const int maxn = 2e5;
char mp[2000][2000];
int num[20];
void init()

    num[0]=1;
    for(int i=1;i<=10;i++)
    
        num[i]=num[i-1]*2;
    
    mp[1][1]=C;
    mp[1][2]=C;
    mp[2][1]=P;
    mp[2][2]=C;
    for(int i=2;i<=10;i++)
    
        for(int j=1;j<=num[i];j++)
        
            for(int k=1;k<=num[i];k++)
            
                if(j<=num[i-1]&&k<=num[i-1])
                    continue;

                if(k>num[i-1]&&j<=num[i-1])
                
                    mp[j][k]=mp[j][k-num[i-1]];
                
                else if(j>num[i-1]&&k>num[i-1])
                
                    mp[j][k]=mp[j-num[i-1]][k-num[i-1]];
                
                else if(j>num[i-1]&&k<=num[i-1])
                
                    if(mp[j-num[i-1]][k]==C)
                        mp[j][k]=P;
                    else mp[j][k]=C;
                
            
        
    


int main()

    init();
    int T;
    scanf("%d",&T);
    while(T--)
    
        int k;
        scanf("%d",&k);
        for(int i=1;i<=num[k];i++)
        
            for(int j=1;j<=num[k];j++)
            
                printf("%c",mp[i][j]);
            
            printf("\n");
        
    
//




    return 0;
View Code

1008Fishing Master

技术图片
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9 + 7;
const int maxn = 1e6 + 10;
int t, n, vis[maxn];
ll a[maxn], k;
struct node
    int id;
    ll yu;
extra[maxn];
bool cmp(node a,node b) 
    return a.yu>b.yu;

int main()

    ll ans = 0, cnt, sum;
    cin >> t;
    while (t--)
    
        queue<ll>q;
        ans = 0;
        cnt = 1;
        sum = 0;
        scanf("%d%lld", &n, &k);
        ans+=k;
        for (int i = 0; i < n; ++i)
        
            scanf("%lld", &a[i]);
            cnt+=a[i]/k;
            extra[i].id=i;
            extra[i].yu=a[i]%k;
            ans+=a[i];
        
        if(cnt<n)
            sort(extra,extra+n,cmp);
            for(ll i=0;i<=n-cnt-1;i++)
                    ans+=k-extra[i].yu;
            
        
        printf("%lld\n",ans);
    
View Code

 

以上是关于赛后总结+部分题解2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛的主要内容,如果未能解决你的问题,请参考以下文章

2017中国大学生程序设计竞赛-哈尔滨站

北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)

2016中国大学生程序设计竞赛(ccpc 长春)题解报告

2016中国大学生程序设计竞赛(ccpc 杭州)题解报告

2016中国大学生程序设计竞赛(ccpc 杭州)题解报告

2016中国大学生程序设计竞赛(长春)-重现赛 题解