Given an integer N,you should come up with the minimum
nonnegative integer M.M meets the follow condition: M
2%10
x=N (x=0,1,2,3....)
For each case, each line contains one integer N(0<= N <=10 9), indicating the given number.
3 3 21 25
None 11 5
直接代码吧:
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
long long N;
struct node{
long long val; //当前数的值;
long long mod;
friend bool operator < (node a, node b){
return a.val>b.val;
}
};
void bfs(long long tmod){
priority_queue<node> q;
node tem;
for(int i=0; i<=9; i++){
if(i*i%10==N%10){
tem.val=i;
tem.mod=10;
q.push(tem);
}
}
while(!q.empty()){
tem=q.top();
q.pop();
if(tem.val*tem.val%tmod==N){
cout << tem.val << endl;
return ;
}
for(int i=0; i<=9; i++){
long long vv=tem.val+tem.mod*i;
if(vv*vv%(tem.mod*10)==N%(tem.mod*10)){
node a;
a.val=vv;
a.mod=tem.mod*10;
q.push(a);
}
}
}
cout << "None\n";
return;
}
int main(){
int T;
cin >> T;
while(T--){
cin >> N;
long long tem=N;
int cnt;
long long tmod=1;
while(tem){
tem/=10;
tmod*=10;
}
bfs(tmod);
}
return 0;
}