题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5690
题意:
题解:找找循环节就行#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
#include<functional>
#define cl(a,b) memset(a,b,sizeof(a));
#define FFC(i,a,b) for(int i=a;i<=b;++i)
#define FFI(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define LL long long
using namespace std;
int v[10010],ans[10010];
int main(){
int t,ic=1;
scanf("%d",&t);
while(t--){
printf("Case #%d:\n",ic++);
int a,c,k,pre,tmp,cnt,cct;LL m,mm;
scanf("%d%I64d%d%d",&a,&m,&k,&c);
FFC(i,0,k)v[i]=0;
tmp=0,cnt=0,cct=0,mm=-1;
while(tmp<=k&&m--)tmp=tmp*10+a;
if(tmp<=k){
if(tmp%k==c)puts("Yes");
else puts("no");
continue;
}
mm=++m,tmp/=10;
while(m--){
tmp=tmp*10+a;
int ttmp=tmp%k;
tmp%=k;
if(v[ttmp])break;
else v[ttmp]++,cnt++,ans[++cct]=ttmp;
}
int vv=mm%cnt;
if(vv==0)vv=cnt;
if(ans[vv]==c)printf("Yes\n");
else printf("No\n");
}
return 0;
}