Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我也是,真的懵逼

Posted by hezongdnf at 2019-09-23 15:18:34 on Problem 3126
In Reply To:奇怪的错误。。。 Posted by:liuyuhui at 2017-05-19 11:00:42
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <set>
#include <queue>
using namespace std;

#define mem(a) memset(a,0,sizeof(a))
#define ll long long
const int maxn = 100100;
const int inf = 0x3f3f3f3f;
int t,n,m;
bool vis[10000];
set<int> a;
void init()
{
    int i,j,k=0;
    for(i = 1001; i < 10000; i+=2)
    {
        for(j = 2; j <= sqrt(i); j++)
        {
            if(i%j == 0) break;
        }
        if(j > sqrt(i)) a.insert(i);
    }
}

struct node
{
    int num,step;
};

void bfs()
{
    mem(vis);
    node x,y;
    vis[n] = 1;
    x.num = n,x.step = 0;
    queue <node> q;
    q.push(x);
    while(!q.empty())
    {
        x = q.front();
        q.pop();
        if(x.num == m)
        {
            printf("%d\n",x.step);
        }
        int ge  = x.num-x.num%10;
        int shi = x.num - (x.num%100-x.num%10);
        int bai = x.num - (x.num%1000/100)*100;
        int qi  = x.num%1000;
        for(int i = 1; i <10 ; i+=2)
        {
            y.num = ge+i;
            if(a.count(y.num) && !vis[y.num])
            {
                y.step = x.step+1;
                vis[y.num] = 1;
                q.push(y);
            }
        }
        for(int i = 0; i <10 ; i++)
        {
            y.num = shi+i*10;
            if(a.count(y.num) && !vis[y.num])
            {
                y.step = x.step+1;
                vis[y.num] = 1;
                q.push(y);
            }
        }
        for(int i = 0; i <10 ; i++)
        {
            y.num = bai+i*100;
            if(a.count(y.num) && !vis[y.num])
            {
                y.step = x.step+1;
                vis[y.num] = 1;
                q.push(y);
            }
        }
        for(int i = 1; i <10 ; i++)
        {
            y.num = qi+i*1000;
            if(a.count(y.num) && !vis[y.num])
            {
                y.step = x.step+1;
                vis[y.num] = 1;
                q.push(y);
            }
        }
    }
}

int main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(0),cout.tie(0);
    init();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        bfs();
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator