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