2 条题解
-
2
#include <bits/stdc++.h> using namespace std; int a, b; int map1[5][5]={0,-1,1,1,-1, 1,0,-1,1,-1, -1,1,0,-1,1, -1,-1,1,0,1, 1,1,-1,-1,0};//按照规则把胜负表写到2维数组*1win 0draw -1lose* queue<int> qa; queue<int> qb; int as = 0, bs = 0; int wl(int a, int b) { return map1[a][b];//返回胜负 } int main() { int n, la, lb; cin >> n >> la >> lb; for (int i = 0; i < la; i++) { cin >> a; qa.push(a); } for (int i = 0; i < lb; i++) { cin >> b; qb.push(b); } for (int i = 0; i < n; i++) { int wlr = wl(qa.front(), qb.front()); if (wlr==1) {//win ascore++ as++; } else if(wlr==-1){//lose bscore++ bs++; } qa.push(qa.front());//运用队列补齐周期长度 qa.pop(); qb.push(qb.front()); qb.pop(); } cout << as << " " << bs; return 0; }
然后你就可以
启动原神轻松通过了! *是不是很简单🎉️🎉️🎉️ * -
1
原文链接:[NOIP2014 提高组] 生活大爆炸版石头剪刀布_静渊隐者的博客-CSDN博客
思路
不是很难,直接模拟即可。
需要注意的是,有些新手会用几万个if和else来判断。其实不必,我们用一个数组就行。比如f[1][0]=1表示当我出石头,你出剪刀时,我可以得到一分。这相对于成堆的if和else更加简洁。~(其实也一样麻烦,还容易写错)~
(0代表剪刀,1代表石头,2代表布,3代表蜥蜴人,4代表斯波克)
模拟的过程中,可以用mod来辅助。
输入
scanf("%d%d%d",&n,&t1,&t2); for(int i=1;i<=t1;i++) { scanf("%d",&a[i]); } a[0]=a[t1]; for(int i=1;i<=t2;i++) { scanf("%d",&b[i]); } b[0]=b[t2];
不难。但要注意,要将a[0]或b[0]赋值为a[t1]或b[t2]。因为取余时,当i是t1或t2时,会在取余操作中变为零。
操作
for(int i=1;i<=n;i++) { sa+=jf[a[i%t1]][b[i%t2]]; sb+=jf[b[i%t2]][a[i%t1]]; }
很简单,这里就不解释了。
输出
printf("%d %d",sa,sb);
好,现在上代码。。。
AC代码
#include<bits/stdc++.h> using namespace std; int jf[5][5]={{0,0,1,1,0}, {1,0,0,1,0}, {0,1,0,0,1}, {0,0,1,0,1}, {1,1,0,0,0}}; int n,t1,t2,sa,sb,a[205],b[205]; int main() { scanf("%d%d%d",&n,&t1,&t2); for(int i=1;i<=t1;i++) { scanf("%d",&a[i]); } a[0]=a[t1]; for(int i=1;i<=t2;i++) { scanf("%d",&b[i]); } b[0]=b[t2]; for(int i=1;i<=n;i++) { sa+=jf[a[i%t1]][b[i%t2]]; sb+=jf[b[i%t2]][a[i%t1]]; } printf("%d %d",sa,sb); }
总结
这题不难,但需要四个心——耐心、细心……文末的点赞与收藏之心。
好了,下一篇文章,将讲解Mivik 的标题
- 1
信息
- ID
- 329
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 59
- 已通过
- 48
- 上传者