wgqqq
失敗は終わりではない、諦めるこそが終わりである。ゴールが見えないから人生はおもしろい(失败并非结束,放弃才是完结。正由于看不到终点,人生才有趣。)

先把代码挂上,有时间再补上题解

POJ 1426 Find The Multiple

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
    ll a;
    while(cin>>a&&a)
    {
        ll k=2;
        ll cmp=1;
        while(cmp%a)
        {
            ll b=k;
            ll cnt=1;
            cmp=0;
            while(b)
            {
                cmp+=(b&1)*cnt;
                cnt*=10;
                b>>=1;
            }
            k++;
        }
        cout<<cmp<<'\n';
    }
    return 0;    
}

 POJ 3126 Prime Path

纯暴力竟然过了???不可思议

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std; 
const int MAXN=10005;
bool prime[MAXN];
int Prime[MAXN];
bool vis[MAXN];
int num=0;
int st,ed;
int ans;
struct state{
    int num;
    int s1,s2,s3,s4;
    int step;
};
void make_prime()
{
    memset(prime,true,sizeof(prime));
    prime[0]=prime[1]=false;
    for(int i=2;i<=MAXN;i++)
    {
        if(prime[i])
        {
            Prime[num++]=i;
        }
        for(int j=0;j<num&&i*Prime[j]<MAXN;j++)
        {
            prime[i*Prime[j]]=false;
            if(!(i%Prime[j]))
                break;
        }
    }
    return;
}
void bfs()
{
    memset(vis,false,sizeof(vis));
    queue <state> q;
    state now,next;
    now.num=st;
    now.s1=st/1000;
    now.s2=(st/100)%10;
    now.s3=(st/10)%10;
    now.s4=st%10;
    now.step=0;
    vis[now.num]=true;
    q.push(now);
    while(!q.empty())
    {
        now=q.front();
        //cout<<now.num<<'\n';
        if(now.num==ed)
        {
            cout<<now.step<<'\n';
            return;
        }
        for(int i=1;i<=9;i++)
        {
            next.s1=i;
            next.s2=now.s2;
            next.s3=now.s3;
            next.s4=now.s4;
            next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4;
            next.step=now.step+1;
            if(prime[next.num]&&!vis[next.num])
            {
                q.push(next);
                vis[next.num]=true;
            }
        }
        for(int i=0;i<=9;i++)
        {
            next.s1=now.s1;
            next.s2=i;
            next.s3=now.s3;
            next.s4=now.s4;
            next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4;
            next.step=now.step+1;
            if(prime[next.num]&&!vis[next.num])
            {
                q.push(next);
                vis[next.num]=true;
            }
        }
        for(int i=0;i<=9;i++)
        {
            next.s1=now.s1;
            next.s2=now.s2;
            next.s3=i;
            next.s4=now.s4;
            next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4;
            next.step=now.step+1;
            if(prime[next.num]&&!vis[next.num])
            {
                q.push(next);
                vis[next.num]=true;
            }
        }
        for(int i=0;i<=9;i++)
        {
            next.s1=now.s1;
            next.s2=now.s2;
            next.s3=now.s3;
            next.s4=i;
            next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4;
            next.step=now.step+1;
            if(prime[next.num]&&!vis[next.num])
            {
                q.push(next);
                vis[next.num]=true;
            }
        }
        q.pop();
    }
    cout<<"Impossible\n";
    return;
    
}
int main()
{
    make_prime();
    int n;
    cin>>n;
    while(n--)
    {
        cin>>st>>ed;
        bfs();
        //cout<<ans<<'\n';
    }
    return 0;
}

 

posted on 2019-08-07 10:28  wgqqq  阅读(127)  评论(0编辑  收藏  举报