hdu 1104 BFS + 数论

来源:互联网 发布:淘宝埋雷软件是真的吗 编辑:程序博客网 时间:2024/05/30 04:10

因为才刚开始ACM 所以数论知识还不知道 只知道简单的搜索。。。。。

以后学了数论再来看看。

AC代码如下:

#include <iostream>#include <queue>#include <cstdio>#include <cstring>#include <string>using namespace std;typedef struct{int now;int step;string rode;}node;bool visit[1000000];int N, K, M, result, KM;void BFS(){queue<node> q;node begins;result = ( ( N + 1 ) % K + K ) % K;KM = K * M;memset( visit, 0, sizeof( visit ) );begins.now = N;begins.step = 0;begins.rode = "";q.push( begins );visit[( begins.now % K + K ) % K] = 1;while( !q.empty() ){node p, temp;p = q.front();q.pop();if( ( p.now % K + K ) % K == result ){cout << p.step << endl;cout << p.rode << endl;return;}temp.step = p.step + 1;temp.now = ( p.now + M ) % KM;temp.rode = p.rode + "+";if( !visit[( temp.now % K + K ) % K ] ){q.push( temp );visit[ ( temp.now % K + K ) % K ] = 1;}temp.now = ( p.now - M ) % KM;temp.rode = p.rode + "-";if( !visit[( temp.now % K + K ) % K ] ){q.push( temp );visit[ ( temp.now % K + K ) % K ] = 1;}temp.now = ( p.now * M ) % KM;temp.rode = p.rode + "*";if( !visit[( temp.now % K + K ) % K ] ){q.push( temp );visit[ ( temp.now % K + K ) % K ] = 1;}temp.now = ( ( p.now % M + M ) %M ) % KM;temp.rode = p.rode + "%";if( !visit[( temp.now % K + K ) % K ] ){q.push( temp );visit[ ( temp.now % K + K ) % K ] = 1;}}cout << 0 << endl;}int main(){while( scanf( "%d%d%d", &N, &K, &M ) && !( N == 0 && K == 0 && M == 0 ) ){BFS();}return 0;}


 

原创粉丝点击