【洛谷】 P1328 生活大爆炸版石头剪刀布
总体方法为打表(刚好输入判断就很符合打表)。
按周期算分,再把周期外的分加上。
上面那个函数是最大公因数(然而我也不知道写函数费时间还是直接循环外费时间 )
周期的个数乘周期内的分,加上周期外的分就是总分。
题解:
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int max_pub(int m,int n)
{
if(m>n)
{
for(int i=m;i<=m*n;i++)
{
if(i%m==0&&i%n==0) return i;
}
}
else
{
for(int i=n;i<=m*n;i++)
{
if(i%m==0&&i%n==0) return i;
}
}
}
int ay[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 by[5][5]=
{
0,1,0,0,1,
0,0,1,0,1,
1,0,0,1,0,
1,1,0,0,0,
0,0,1,1,0
};
int main()
{
int n,na,nb;
cin>>n>>na>>nb;
int a[na];
int b[nb];
int zhou=max_pub(na,nb);
for(int i=0;i<na;i++)
{
cin>>a[i];
}
for(int i=0;i<nb;i++)
{
cin>>b[i];
}
int aw=0,bw=0;
int acount=0,bcount=0;
for(int i=0;i<zhou;i++) //周期内记分
{
aw=aw+ay[a[acount]][b[bcount]];
bw=bw+by[a[acount]][b[bcount]];
acount++;
bcount++;
if((i+1)%na==0) acount=0;
if((i+1)%nb==0) bcount=0;
}
aw=aw*(n/zhou);
bw=bw*(n/zhou);
for(int i=0;i<n%zhou;i++)
{
aw=aw+ay[a[acount]][b[bcount]];
bw=bw+by[a[acount]][b[bcount]];
acount++;
bcount++;
if((i+1)%na==0) acount=0;
if((i+1)%nb==0) bcount=0;
}
cout<<aw<<' '<<bw<<endl;
return 0;
}