[NOIP2014 提高组] 生活大爆炸版石头剪刀布

题目名字 生活大爆炸版石头剪刀布

题目链接

题意

根据题目所给,甲乙分别出拳为0,1,2,3,4时双方的得分,给出回合数量,和甲乙两人出拳的周期a,b;

再依次输入甲乙出拳周期每次出的拳

判断n个回合后,甲乙的得分是多少

思路

  1. 把每个情况通过二维数组fn存入方便后面进行查找
  2. 行是a,列是b,将每次次数分别除以甲乙的出拳周期即可得每次出拳在周期内的对应招数,然后fa和fb进行计算每个回合的分数

算法一:二维数组

代码
cpp 复制代码
 #include <algorithm>
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
const int N=1e6+10;
int n,a1,b2;
int fa=0,fb=0;
int a[N],b[N];
int main(){
	cin>>n>>a1>>b2;
	int fn[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};
	for(int i=0;i<a1;i++) cin>>a[i];
	for(int i=0;i<b2;i++) cin>>b[i];
	for(int i=0;i<n;i++)
	{
		fa+=fn[a[i%a1]][b[i%b2]];
		fb+=fn[b[i%b2]][a[i%a1]];
	}
	cout<<fa<<" "<<fb;
	return 0;
}

 

总结

如果遇到这种固定的周期性问题,用if写会特别麻烦而且很可能写不出来,所以就可以直接定义没个情况对应的数字成为一个数组,然后后面就是根据题目进行相应的计算,代码会简单很多而且清晰

相关推荐
Trouvaille ~几秒前
【优选算法篇】拓扑排序——逻辑先后与任务依赖的终极拆解
数据结构·c++·算法·leetcode·青少年编程·蓝桥杯·拓扑学
T1an-13 分钟前
博乐科技笔试题
科技·算法
XiYang-DING9 分钟前
【LeetCode】118.杨辉三角
算法·leetcode·职场和发展
wuhen_n16 分钟前
排列算法完全指南 - 从全排列到N皇后,一套模板搞定所有排列问题
前端·javascript·算法
ai生成式引擎优化技术20 分钟前
拓世网络技术开发工作室的ts概率递推ai工程应用技术GEOChatGPT,不同用户账号信息,网站引用效果
算法
CylMK21 分钟前
题解:UVA1218 完美的服务 Perfect Service
数据结构·c++·算法·深度优先·图论
重生之我是Java开发战士23 分钟前
【广度优先搜索】BFS解决拓扑排序:课程表I,课程表II,火星词典
算法·leetcode·广度优先
丶小鱼丶30 分钟前
数据结构和算法之【阻塞队列】上篇
java·数据结构
人道领域32 分钟前
LeetCode【刷题日记】:滑动窗口算法详解:从暴力法到最优解
java·算法·leetcode
凤年徐34 分钟前
封装红黑树实现 mymap 和 myset
网络·c++·算法