hdu 1104

来源:互联网 发布:域名备案多少钱 编辑:程序博客网 时间:2024/05/29 03:14


题目大意是N,K,M可以将N+M-->M,N-M-->M,N*M--->M,N%M--->M,然后求什么时候可以使N%K==(初始N+1)%K,数学不好,只会搜索,BFS 要记录路径

注意N可能是小与0的,要加上n*M直到大于0再求N%KM;


#include <iostream>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAX = 1000000+10;const int INF = 0x3fffffff;int visited[MAX];char sign[4] = {'+','-','*','%'};int Ni,K,M,km;typedef struct {int Nc;queue<char> sign;}node;int BFS(){memset(visited,0,sizeof(visited));queue<node> q;node a;Ni = (Ni % km) + km;a.Nc = Ni;q.push(a);visited[a.Nc]=1;while(!q.empty()){node p;p = q.front();q.pop();if(p.Nc % K == (Ni+1)%K){int len = p.sign.size();cout<<len<<endl;while(!p.sign.empty()){cout<<p.sign.front();p.sign.pop();}cout<<endl;return 1;}for(int i = 0; i < 4; i++){a = p;if(i == 0){a.Nc = (p.Nc + M)%km;a.sign.push(sign[i]);if(!visited[a.Nc]){visited[a.Nc] = 1;q.push(a);}}if(i == 1){a.Nc = ((p.Nc - M)%km + km )%km;a.sign.push(sign[i]);if(!visited[a.Nc]){visited[a.Nc] = 1;q.push(a);}}if(i == 2){a.Nc = (p.Nc * M) %km;a.sign.push(sign[i]);if(!visited[a.Nc]){visited[a.Nc] = 1;q.push(a);}}if(i == 3){a.Nc = (p.Nc % M)%km;a.sign.push(sign[i]);if(!visited[a.Nc]){visited[a.Nc] = 1;q.push(a);}}}}return 0;}int main(){while(cin>>Ni>>K>>M){if((Ni && K && M) == 0) {break;}km = K * M;if(BFS() == 0){cout<<'0'<<endl;}}return 0;}


原创粉丝点击