题目描述
石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:
斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
现在,小 A
和小 B
尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小A
以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为 66 的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-......”,而如果小B
以“剪刀-石头-布-斯波克-蜥蜴人”长度为 55 的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-......”
已知小 A
和小 B
一共进行 NN 次猜拳。每一次赢的人得 11 分,输的得 00 分;平局两人都得 00 分。现请你统计 NN 次猜拳结束之后两人的得分。
输入格式
第一行包含三个整数:N,N_A,N_BN,NA,NB,分别表示共进行 NN 次猜拳、小 A
出拳的周期长度,小 B
出拳的周期长度。数与数之间以一个空格分隔。
第二行包含 N_ANA 个整数,表示小 A
出拳的规律,第三行包含 N_BNB 个整数,表示小 B
出拳的规律。其中,00 表示“剪刀”,11 表示“石头”,22 表示“布”,33 表示“蜥蜴人”,44表示“斯波克”。数与数之间以入输出样例
输入 #1复制
10 5 6 0 1 2 3 4 0 3 4 2 1 0
输出 #1复制
6 2
输入 #2复制
9 5 5 0 1 2 3 4 1 0 3 2 4
输出 #2复制
4 4
#include<bits/stdc++.h>
using namespace std;
const int MAXN =100005;
int n,na,nb,a[MAXN],b[MAXN],cnta=0,cntb=0;
int vs[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 main()
{
cin >> n >> na >> nb;
for(int i = 0; i < na; i++) cin >> a[i];
for(int i = 0; i < nb; i++) cin >> b[i];
for(int i = 0; i < n; i++)
{
cnta += vs[a[i % na]][b[i % nb]]; //周期循环
cntb += vs[b[i % nb]][a[i % na]];
}
cout << cnta << " " << cntb << endl;
return 0;
}
题目描述
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti (单位:秒),船上的乘 客数k_iki,以及每名乘客的国籍 x_{i,1}, x_{i,2},…,x_{i,k}xi,1,xi,2,…,xi,k。
小K统计了nn艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的2424小时(2424小时=8640086400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算nn条信息。对于输出的第ii条信息,你需要统计满足t_i-86400<t_p \le t_iti−86400<tp≤ti的船只pp,在所有的x_{p,j}xp,j中,总共有多少个不同的数。
输入格式
第一行输入一个正整数nn,表示小K统计了nn艘船的信息。
接下来nn行,每行描述一艘船的信息:前两个整数t_iti和k_iki分别表示这艘船到达海港的时间和船上的乘客数量,接下来k_iki个整数x_{i,j}xi,j表示船上乘客的国籍。
保证输入的t_iti是递增的,单位是秒;表示从小K第一次上班开始计时,这艘船在第t_iti秒到达海港。
保证 1 \le n \le 10^51≤n≤105,\sum{k_i} \le 3*10^5∑ki≤3∗105 ,1\le x_{i,j} \le 10^51≤xi,j≤105, 1 \le t_{i-1}\le t_i \le 10^91≤ti−1≤ti≤109。
其中\sum{k_i}∑ki表示所有的k_iki的和。
输出格式
输出nn行,第ii行输出一个整数表示第ii艘船到达后的统计信息。
输入输出样例
输入 #1复制
3 1 4 4 1 2 2 2 2 2 3 10 1 3
输出 #1复制
3 4 4
输入 #2复制
4 1 4 1 2 2 3 3 2 2 3 86401 2 3 4 86402 1 5
输出 #2复制
3 3 3 4
说明/提示
【样例解释1】
第一艘船在第11秒到达海港,最近2424小时到达的船是第一艘船,共有44个乘客, 分别是来自国家4,1,2,24,1,2,2,共来自33个不同的国家;
第二艘船在第22秒到达海港,最近2424小时到达的船是第一艘船和第二艘船,共有4 + 2 = 64+2=6个乘客,分别是来自国家4,1,2,2,2,34,1,2,2,2,3,共来自44个不同的国家;
第三艘船在第1010秒到达海港,最近2424小时到达的船是第一艘船、第二艘船和第 三艘船,共有4+ 2+1=74+2+1=7个乘客,分别是来自国家4,1,2,2,2,3,34,1,2,2,2,3,3,共来自44个不同 的国家。
【样例解释2】
第一艘船在第11秒到达海港,最近2424小时到达的船是第一艘船,共有44个乘客,分别是来自国家1,2,2,31,2,2,3,共来自33个不同的国家。
第二艘船在第33秒到达海港,最近2424小时到达的船是第一艘船和第二艘船,共有4+2=64+2=6个乘客,分别是来自国家1,2,2,3,2,31,2,2,3,2,3,共来自33个不同的国家。
第三艘船在第8640186401秒到达海港,最近2424小时到达的船是第二艘船和第三艘船,共有2+2=42+2=4个乘客,分别是来自国家2,3,3,42,3,3,4,共来自33个不同的国家。
第四艘船在第8640286402秒到达海港,最近2424小时到达的船是第二艘船、第三艘船和第四艘船,共有2+2+1=52+2+1=5个乘客,分别是来自国家2,3,3,4,52,3,3,4,5,共来自44个不同的国家。
#include<bits/stdc++.h>
#include<cstdio>
#include<vector>
using namespace std;
const int Max = 100006;
int tong[Max],t[Max],k[Max];
vector<int> s[Max];
int js = 0;
int main()
{
int qwq;
int n;
scanf("%d",&n);
for(int i = 1;i <= n;i++)
{
cin >> t[i] >> k[i];
for(int j = 1;j <= k[i];j++)
cin >> qwq,s[i].push_back(qwq);
}
int l = 1;//K第一次上班开始计时 ti到达海港
for(int i = 1;i <= n;i++)
{
while(t[i] - t[l] >= 86400)
{
for(int j = 0;j < k[l];j++)
{
tong[s[l][j]] --;
if(tong[s[l][j]] == 0)
js --;
}
l ++;
}
for(int j = 0;j < k[i];j++)
{
tong[s[i][j]] ++; //tong[s]同国籍
if(tong[s[i][j]] == 1)
js ++;
}
cout << js << endl;
}
return 0;
}