文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>hduProblem : 1104 ( Remainder )

hduProblem : 1104 ( Remainder )

时间:2011-03-18  来源:sook&&ambitieux

Problem : 1104 ( Remainder )     Judge Status : Accepted
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta

#include<stdio.h>

#include<iostream>

#include<string>

#include<cstring>

#include<queue>

using namespace std;

struct cc

{

    int n,m;

};

string op[1005];

int step[1005];

int vis[1005],ans,k;

int main()

{

    int n,m,ok,flag;

    while(scanf("%d%d%d",&n,&k,&m)==3)

    {

        ok=0;

        if(!n&&!m&&!k)break;

        memset(step,0,sizeof(step));

        memset(vis,0,sizeof(vis));

        ans=(n+1+1000*k)%k;

        for(int i=0;i<=1001;i++)

            op[i].clear();

        queue <cc> q;

        cc c;

        c.m=(n+1000*m)%m;//注意n=-1和n=-1+10(k)做%运算结果不一样,所以事先存n%m;当以后遇到%时c.n=c.m%m;

        c.n=(n+1000*k)%k;

        q.push(c);

        vis[c.n]=1;

        while(!q.empty())

        {

            cc temp=q.front();

            q.pop();

            for(int i=0;i<4;i++)

            {

                cc u=temp;

                switch(i)

                {

                case 0:u.n=(u.n+m+1000*k)%k;break;

                case 1:u.n=(u.n-m+1000*k)%k;break;

                case 2:u.n=(u.n*m+1000*k)%k;u.m=0;break;//u.n*m后,u.n%m==0;以后遇到%运算后u.n==0!=u.m%m;

                case 3:u.n=(u.m+1000*k)%k;break;

                }

                if(!vis[u.n])

                {

                    step[u.n]=step[temp.n]+1;

                    vis[u.n]=1;

                    switch(i)

                    {

                    case 0:op[u.n]=op[temp.n]+'+';break;

                    case 1:op[u.n]=op[temp.n]+'-';break;

                    case 2:op[u.n]=op[temp.n]+'*';break;

                    case 3:op[u.n]=op[temp.n]+'%';break;

                    }

                    q.push(u);

                    if(u.n==ans){ok=1;flag=u.n;break;}   

                }

              

            }

              if(ok)break;   

        }

        if(!ok)printf("0\n");

        else

        {

            int t=0;

            printf("%d\n",step[flag]);

            cout<<op[flag]<<endl;

        }

    }

}

 

相关阅读 更多 +
排行榜 更多 +
打螺丝高手

打螺丝高手

模拟经营 下载
解救火柴人计划安卓版

解救火柴人计划安卓版

体育竞技 下载
鸡生化精英安卓版

鸡生化精英安卓版

飞行射击 下载