2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛(重现赛)

  • A.Chuanpai
  • B.Hotpot
  • D.Rock Paper Scissors
  • H.Nihongo wa Muzukashii D
  • K.K-skip Permutation

2021四川省赛题场链接


A.Chuanpai

题目链接

签到题没啥好说的。代码如下:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int t,n;cin>>t;while(t--){cin>>n;int l=n/2;int sum =0;for(int i =1;i<=l;i++){if(i<=6&&n-i>=1&&n-i<=6) sum++;} cout<<sum<<endl;}return 0;
}

B.Hotpot

题目链接

题目大意:
t组样例,每组n个人吃火锅,有k种食材,所有人总共可以操作m次,然后告诉你每个人最喜欢的食材是哪个。至于怎么操作呢,那就是轮到哪个人,那个幸运儿就去看看锅里面有没有他爱吃的,有的话他就吃掉并且快乐值++;没有的话他就会往里面加这种食材,没得吃也不能增加快乐值。

解题思路:
讲个笑话,打比赛的时候我没注意数据范围,用暴力WA了两次,补题的时候又各种细节上的小错误不断,又WA了七次(别骂了别骂了)。

好了说正经的。首先,看数据范围,不能暴力。那就得看看有没有什么规律可循。初步思考可以发现,如果有两个人,都喜欢吃食材1,那么第一个人放进去第二个人吃,那么第一个人快乐值永远为0(因为他一直在放,没得吃),第二个人的快乐值就是m/2(m次操作两个人轮流)。但是如果人数为奇数的情况下,比如有三个人,都喜欢食材1,总共能操作20次,那么在第一轮操作时,第一个人和第三个人是吃不到的,第二个人可以吃到,但是轮到第二轮时,第一个人和第三个人是能吃到的,但是第二个人吃不到。那么我们就可以将两轮看做一个循环,20/6=3,只要记录第一次循环每个人的快乐值再*3,20%6=2;暴力解决剩下两次,就OK啦。

#include<iostream>
#include<cstring>
using namespace std;
const int N=1e5+10;
struct f{int x;//每个人喜欢的食物int happy;//每个人的快乐值
}a[N];
int v[N];//用来记录锅子里有没有这个食材
long long n,k,m;
int main()
{int t;cin>>t;while(t--){memset(v,0,sizeof(v));cin>>n>>k>>m;for(int i=0;i<n;i++){cin>>a[i].x;a[i].happy=0;}if(m>=2*n){for(int i=0;i<2*n;i++){int j=i%n;if(v[a[j].x]==0){//锅子里没有喜欢的食材v[a[j].x]++;//放进食材}else{//锅子里有喜欢的食材v[a[j].x]--;//吃掉a[j].happy++;//他快乐了}}for(int i=0;i<n;i++)a[i].happy*=(m/(2*n));//以2*n为一次循环,有几次循环就让快乐值乘几}for(int i=0;i<m%(2*n);i++)//剩下的操作次数{int j=i%n;if(v[a[j].x]==0)v[a[j].x]++;else{v[a[j].x]--;a[j].happy++;}}for(int i=0;i<n;i++){if(i)cout<<" ";cout<<a[i].happy;}cout<<endl;}return 0;
}

D.Rock Paper Scissors

题目链接

题目大意:
玩石头剪刀布的游戏,t组样例,每组两行分别代表两个人拥有的牌,赢的人得一分,输的人扣一分,打平不得分,要求出第二行那个人运气最最好的情况下得几分。

解题思路:
如果让第二个人出石头,那就要让第一个人出剪刀,如果让第二个人出剪刀,就要让第一个人出布,如果让第二个人出布,那就让第一个人出石头,这样就能让第二个人的得分达到最大,因此先尽量多的用这种方法达到分数最大。如果剩下还有牌的话,尽量选择打平手,这样至少不扣分。最后如果还剩下牌的话,那就只剩下“输”这一种情况了,那就只能扣分了。

代码如下:

#include<iostream>
using namespace std;
int main()
{int T;cin>>T;while(T--){long long sum=0;long long a[3];long long b[3];cin>>a[0]>>a[1]>>a[2];cin>>b[2]>>b[0]>>b[1];//当时这么写输入是为了后面写赢的情况的时候能方便一点//但是事实上并不会方便多少,后面另外两种情况还是得换回来for(long long i=0;i<3;i++)//赢的情况{if(b[i]>=a[i]){sum+=a[i];b[i]-=a[i];a[i]=0;}else{sum+=b[i];a[i]-=b[i];b[i]=0;}}long long x=b[2];b[2]=b[1];b[1]=b[0];b[0]=x;for(long long i=0;i<3;i++){//打平的情况if(b[i]>=a[i]){b[i]-=a[i];a[i]=0;}else{a[i]-=b[i];b[i]=0;}}for(long long i=0;i<3;i++)//输的情况{sum-=b[i];}cout<<sum<<endl;}return 0;
}

H.Nihongo wa Muzukashii D

题目链接

(别看题目链接了,直接看我写的题目大意吧。相信我,题目没什么好看的。)

题目大意:
t组样例,每组给你一个单词。如果这个单词的后缀是“imasu”“chimasu”“rimasu”,那就替换成“tte”;如果后缀是“mimasu”“bimasu”“nimasu”,那就替换成“nde”;如果后缀是“kimasu”,那就替换成“ite”,但是如果这个单词是“ikimasu”那就另当别论——直接输出“itte”即可;如果后缀是“gimasu”,那就替换成“ide”;如果后缀是“shimasu”,那就替换成“shite”。

解题思路:
请先允许本英语菜鸟吐槽一下,当时看这个题目差点给我看吐了,但是看完之后才意识到,这真的是一道再简单不过的字符串题目。

通过题目我们不难发现,它们的后缀都是“masu”,那么我们其实只要比对masu”前面的几个字符就可以了。做法很简单,分类讨论,多写几个if就好了。但是要注意一下,先比对字符串比较长的(比如说“shimasu”)。如果把字符短的写在前面的话,会判断错,比如说先比对“imasu”,那如果输入的其实是“mimasu”也会先被判为“imasu”。还有就是如果碰到“ikimasu”是直接输出“itte”而不是把后缀替换成“itte”,我一开始就因为这个原因WA了一发。所以这个最好写在最前面特判。

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{int t;cin>>t;while(t--){char a[35];cin>>a;int len=strlen(a);if(strcmp(a,"ikimasu")==0) cout<<"itte"<<endl;else{if(a[len-7]=='c'&&a[len-6]=='h'&&a[len-5]=='i'){a[len-7]='\0';cout<<a<<"tte"<<endl;}else if(a[len-7]=='s'&&a[len-6]=='h'&&a[len-5]=='i'){a[len-7]='\0';cout<<a<<"shite"<<endl;}else if(a[len-6]=='r'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"tte"<<endl;}else if(a[len-6]=='m'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"nde"<<endl;}else if(a[len-6]=='b'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"nde"<<endl;}else if(a[len-6]=='n'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"nde"<<endl;}else if(a[len-6]=='k'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"ite"<<endl;}else if(a[len-6]=='g'&&a[len-5]=='i'){a[len-6]='\0';cout<<a<<"ide"<<endl;}else if(a[len-5]=='i'){a[len-5]='\0';cout<<a<<"tte"<<endl;}}} return 0;}

K.K-skip Permutation

题目链接

题目大意:
给你P个数,从1到P的每个数都要用到,你要使这些数字尽量排成一个序列,使后面那个数比前面那个数字大k。然后你要尽量使这些序列多。

解题思路:
一开始我理解错了题意(英语菜鸟吃大亏),WA了一次。我想的方法是用两个for循环,外层是每个序列的头,内层就接着外层的数不断的增加k直到超过P的大小。设一个变量num,每增加一次就num++,num达到P的时候就说明每个都被用过了。

#include<iostream>
using namespace std;
int main()
{int P,k;cin>>P>>k;int num=0;for (int i=1;i<=P;i++){for (int j=0;j*k+i<=P;j++){num++;if (num<P) cout<<j*k+i<<" ";else cout<<j*k+i;}if(num==P) break;}return 0;
}

2021四川省赛A,B,D,H,K相关推荐

  1. 【2021四川省赛】E.Don‘t Really Like How The Story Ends 图论

    2021四川省赛E Don't Really Like How The Story Ends 题目大意 给图加边,使得一个可能的DFS序列刚好是从1到n Time : 1000 ms Memory: ...

  2. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  3. 2021美赛Latex排版美化 完整代码1

    2021美赛Latex排版 还有两周就打美赛啦!!!这次小组准备用Latex排版,毕竟比word用得舒坦~ 下面是官网下载的MCM-ICM_2021_Summary: %%%%%%%%%%%%%%%% ...

  4. 长沙学院2021校赛

    长沙学院2021校赛 A.小圆前辈去上学 题目 思路 代码 B.小圆前辈的素数 题目 思路 CODE C.小圆前辈去爬山 D.小圆前辈的魔法 题目 思路 代码 E.小圆前辈的排列组合 题目 思路 代码 ...

  5. 2021浙江省赛题解(A,C,F,G,J,L,M)

    2021浙江省赛题解(A,C,F,G,J,L,M) A.League of Legends 题解 签到题 直接求和判断一下 注意会爆 i n t int int以及相等的情况. 代码 #include ...

  6. 【GPLT】【2021天梯赛真题题解】【231分】

    文章目录 L1-1 人与神 (5 分) 题目描述 题目分析 L1-2 两小时学完C语言 (5 分) 题目描述 题目分析 L1-3 强迫症 (10 分) 题目描述 题目分析 L1-4 降价提醒机器人 ( ...

  7. [SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)

    [SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6 [SWPUCTF 2021 新生赛]ez_caesar [SWPUCTF 2021 新 ...

  8. 2021美赛Latex排版美化 完整代码2

    今天是2月2号,还有三天就打美赛了,我在2021美赛Latex排版美化 完整代码1的基础上又做了一些补充,希望可以帮助到大家. 文章目录 一.2021美赛新要求 二.带颜色的表格 三.公式 四.目录超 ...

  9. 2021.03.30【2021省赛】模拟 比赛总结

    2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...

最新文章

  1. ajax存到php变量,Ajax返回值作为PHP变量
  2. 前端学习(626):数据类型简介
  3. linux rar命令没找到,Linux没有rar解压命令
  4. 【HDU - 1870】愚人节的礼物(水题模拟 思想类似于栈?)
  5. 洛谷 P1463 [SDOI2005]反素数ant P1820 寻找AP数
  6. acill排序 java_Map集合按照ASCII码从小到大(字典序)排序--JAVA
  7. gcc预处理、编译、汇编、链接详解
  8. 1.11 双向神经网络
  9. Java加密算法(十一)——双向认证
  10. iOS底层探索之Runtime(五): 消息转发
  11. 如何用计算机打开苹果手机,苹果手机如何投屏到电脑
  12. 路由器的两个端口接在同一个交换机上_2个路由器怎么连接?
  13. 重估维信金科:担保压身,负重难行
  14. 语音信号处理--基音检测实验
  15. 「Spring Boot」接口幂等性的4种实现方案
  16. ipa在线安装搭建_AppCake,手机端签名安装IPA,无需越狱
  17. 简要概述《网络安全法》与“等保”的关系
  18. 如何查看电脑运行记录
  19. 866数据结构重点内容
  20. rewrite地址转换

热门文章

  1. 阿里云认证证书合集(一起来考证)
  2. JavaScript单选框选择操作
  3. 计算机专业:考研 VS 工作
  4. 计算机专业到底该不该考研?
  5. 教你解决线上频出MySQL死锁问题
  6. [10] JMeter-察看结果树,你知道都有哪些功能吗?
  7. JAVA接口设计篇:这些都不知道,别说你懂接口设计
  8. 5 个常用 Python 标准库
  9. Python软件编程等级考试一级——20220915
  10. 基于python的中证股票分析