题面
题目描述
输入
输出
样例输入
1 2 1 0 2 1 0 0 0 3
样例输出
8
数据范围限制
提示
思路
没想到GDKOI Day2还有人口普查题,比赛的时候看到这题顺手就给切了,虽然只有这道题有分。
显然,1和10是两个没用的东西,忽略它们就行了。我们可以考虑把4转为2个2,6转为1个2、1个3,8转为3个2。把
a
2
a_2
a2和
a
5
a_5
a5分别减去
m
i
n
(
a
2
,
a
5
)
min(a_2,a_5)
min(a2,a5)即可。最后将剩下的数相乘
%
10
\%10
%10求个周期即可。
Code
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
ll f[15][15],p[15],a[15],ans=1;
int main()
{
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
for(int i=1;i<=10;i++)
scanf("%lld",&a[i]);
f[2][0]=6;f[2][1]=2;f[2][2]=4;f[2][3]=8;
f[3][0]=1;f[3][1]=3;f[3][2]=9;f[3][3]=7;
f[5][0]=5;f[6][0]=6;
f[7][0]=1;f[7][1]=7;f[7][2]=9;f[7][3]=3;
p[5]=1;
p[2]=p[3]=p[7]=4;
a[2]=a[2]+a[4]*2+a[6]+a[8]*3;
a[3]=a[3]+a[6]+a[9]*2;
a[1]=a[10]=a[4]=a[6]=a[8]=a[9]=0;
if(a[5]>0)
{
if(a[5]>a[2]) a[5]-=a[2],a[2]=0;
else a[2]-=a[5],a[5]=0;
}
for(int i=1;i<=10;i++)
if(a[i])
{
ans=ans*f[i][a[i]%p[i]];
ans%=10;
}
printf("%lld",ans);
}