您的位置:首页 > 其它

HDU 1005 找规律

2017-11-18 22:37 459 查看
6/1000

题解

看到题的第一眼是想些矩阵乘法+快速幂来着…但是发现模数好小

然后发现一共最多就49种情况…于是愉快的找一下圈就行了

感觉自己写的有一点复杂QAQ

不过还好

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int f[10][10];
int main()
{
//freopen("in.txt","r",stdin);
int a,b,n;
while(scanf("%d%d%d",&a,&b,&n),a||b||n){
memset(f,-1,sizeof(f));
int x=1,y=1,nx,ny,cnt=0,cir;
while(1){
ny=(a*y+b*x)%7;
nx=y;
if(f[nx][ny]!=-1)break;
f[nx][ny]=++cnt;
x=nx;y=ny;
}
cir=f[x][y]-f[nx][ny]+1;
x=y=1;
for(int i=3;i<=n;i++)
{
int tmp=(a*y+b*x)%7;
x=y;y=tmp;
if((x==nx)&&(y==ny))n=i+(n-i)%cir;
}
printf("%d\n",y);
}
return 0;
}


以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: