ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

2020中国大学生程序设计竞赛(CCPC) - 网络选拔赛总结

2020-09-26 21:01:30  阅读:348  来源: 互联网

标签:信封 maxx int 矩阵 CCPC K1 2020 选拔赛 include


1003 Express Mail Taking

题意:有n个柜子(编号1-n),m封信,k号位置有钥匙,现在需要取信封,并且每取一次信封都要从k号位置进行领取一次钥匙,再去有信封的位置领取信封,问最短路径是多少

思路:建立两个数组,一个存从密码柜到信封柜加上信封柜到密码柜的距离,一个存从密码柜到信封柜加上信封柜回到起始点的距离,循环比较大小,进行判断哪个应该设置成最后一个信封柜,保证其路径最短

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 using namespace std;
 6 const int maxx=1e6+1;
 7 int a[maxx],b[maxx],c[maxx];
 8 int main(){
 9     int t;
10     scanf("%d",&t);
11     while(t--){
12         int n,m,k;
13         scanf("%d %d %d",&n,&m,&k);
14 
15         for(int i=0;i<m;i++){
16             scanf("%d",&a[i]);
17         }
18 
19         int minn=0;
20         long long int sum=0;
21         for(int i=0;i<m;i++){
22             b[i]=abs(a[i]-k+a[i]-k);//存入第一种数据
23             sum+=b[i];
24             c[i]=abs(a[i]-k)+a[i]-1;//存入第二种数据
25             if(i!=0&&(c[i]-b[i])<(c[minn]-b[minn])){
26                 minn=i;
27             }
28         }
29         printf("%lld\n",sum+c[minn]-b[minn]+k-1);
30 
31 
32     }
33 }
View Code

 

1007 CCPC Training Class

题意:字符串中重复最多的字母是重复了多少次,直接输出次数

 

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxx=1e6+1;
 8 char s[maxx];
 9 int main(){
10     int n,num=0;
11     scanf("%d",&n);
12     num=n;
13     while(n--){
14         printf("Case #%d: ",num-n);
15         scanf("%s",&s);
16         int len=strlen(s);
17         sort(s,s+len);
18         int sum1=1;
19         int sum2=0;
20 
21         for(int i=1;i<len;i++){
22             if(s[i]==s[i-1]){
23                 sum1++;
24             }else{
25 
26                 sum2=max(sum1,sum2);
27                 sum1=1;
28             }
29         }
30         printf("%d\n",sum2);
31     }
32 }
View Code

 

 

1010 Report

题意:如果所给数组中存在连续相等的数,那么就输出NO,否则输出YES

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxx=1e6+1;
 8 char s[maxx];
 9 int a[maxx];
10 int main(){
11     int n;
12     scanf("%d",&n);
13     while(n--){
14         int len;
15         scanf("%d",&len);
16         for(int i=0;i<len;i++){
17             scanf("%d",&a[i]);
18         }
19         int flag=0;
20         for(int i=1;i<len;i++){
21             if(a[i]==a[i-1]){
22                 flag=1;
23                 break;
24             }
25         }
26         if(flag==1){
27             printf("NO\n");
28         }else{
29             printf("YES\n");
30         }
31     }
32 }
View Code

 

1011 3x3 Convolution

题意:给定两个矩阵,K‘和A,给定公式求K和Cn,输出当n—>+∞时的Cn,并且已知:

且所求:

思路:

 

根据已知:

C1,1=A1,1*K1,1+A1,2*K1,2+A1,3*K1,3+…+A3,2*K3,2+A3,3*K3,3

…………

 

Cn,n-1=An,n-1*K1,1+An,n*K1,2

Cn,n=An,n*K1,1

1)如果K1,1=0,则在执行完1次之后Cn,n为0;在执行完两次之后Cn,n-1也为0……执行完n次之后,矩阵A 就变成了零矩阵;

2)如果K1,1!=0,且其余部分全部为0,那么相当于是在原矩阵的基础之上乘了K1t,所以各项的比值不变,结果还是原矩阵;

3)如果K1,1!=0,且其余部分存在不为0的部分,那么矩阵k的元素和肯定比每一项大,因为每一项是非负的,并且最少有两项,所以每个元素都在变小,都在乘以一个小于1的一个数的无穷次方,最后结果就是矩阵变成0矩阵

本题反思:看式子就很蒙,就想靠拢矩阵,但是怕自己没学好线性代数,可能就更影响自己看的效率了,导致最后连题都没看懂,后来过的人越来越多,更浮躁了,后来就放弃了。其实这个题看看式子,列列样例,分分情况大概就能知道这个题想干什么,怎么解。

 

总结:1.最近也是一直没有碰,所以导致一上手,题目都读的迷迷糊糊。从一开始不会读题,到后来懵懵懂懂的开始做题直接下手,就想着边敲代码边想思路,就不是很顺利。等到真正做的时候才发现,应该是等读完题以后,先想思路并且在纸上进行验算,想好了容易出漏洞的特殊样例,做好这一系列的基本工作有了大概的题解框架以后,再敲代码,这样会顺利很多。如果一上来题都懵懵懂懂思路还没有全部想好,题解的方向并不是很清晰。这样的话,不仅自己会做不出题来急躁,也会开始怀疑自己的思路是否是正确,很耽误自己的效率和信心。

2.而且解题过程中也要在题都读不懂的情况下学会猜答案,很多签到题都是题目很长很混乱,扰乱你的判断,比如这次的1007,最后我们在实在没有解题思路并且实在读不懂题的情况下猜了一把。当然也要学会解题过程中,那些比较难以理解的数学公式记得写写特殊情况或者特殊样例,从特殊到一般,做做简化可能有利于解题。其实有时候题目样例也会给出很多隐藏的已知条件,比如这次的1011,这次样例中给出的两种结果情况就是最后的结果分类,不是零矩阵就是原矩阵。从特殊到一般,从样例到题解,不妨也是一个好的选择。

3.看不明白的题可以先放一放,或者根据样例去理解题目,而不是跟着题目去看样例,换一种理解题的方式可能会更能方便解题。

 

标签:信封,maxx,int,矩阵,CCPC,K1,2020,选拔赛,include
来源: https://www.cnblogs.com/bonel/p/13736747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有