HDU 4394 Digital Square【搜索】
题意: M2%10x=N ,给出n值,找到满足等式的最小m值,x=(0,1,2...)。
分析: 由于M的位数不可能超过n的位数,可以从n的最后一位开始逐位搜索。
#include<stdio.h> #include<string.h> const __int64 INF=999999999; __int64 num[25]; __int64 min(__int64 a,__int64 b) { return a<b?a:b; } __int64 ans,n; int top; __int64 p; void dfs(int pos,__int64 w,__int64 res) { if(top<=pos) { ans=min(ans,res); return; } for(__int64 k=0; k<10;k++){ if((res*res/w+p*k%10)%10==num[pos]) dfs(pos+1,w*10,k*w+res); } } int main() { int t; __int64 i,tmp; scanf("%d",&t); while(t--) { scanf("%I64d",&n); top=0; tmp=n; while(tmp) { num[top++]=tmp%10; tmp/=10; } ans=INF; for(i=0;i<=9;i++) if(i*i%10==num[0]) { p=i<<1; dfs(1,10,i); } if(ans==INF) printf("None\n"); else printf("%I64d\n",ans); } return 0; }