zoukankan      html  css  js  c++  java
  • USACO 4.3 Street Race&The Primes(跪了)

    涉及到的图的题目不会,贴个别人代码先过了,晕,这几天真是烦死了。

    /*
    
    ID: hubiao cave
    
    PROG: prime3
    
    LANG: C++
    
    */
    
    
    
    #include <fstream>
    #include <iostream>
    #include <cmath>
    #include <memory.h>
    
    using namespace std;
    
    const int MAX = 99999;
    
    const int DIV[6] = {0,10000, 1000, 100, 10, 1};
    
    bool primes[MAX];
    
    int n, sum;
    
    int prime1[10][1000][6];
    int nprime1[10];
    
    int prime3[10][1000][6];
    int nprime3[10];
    
    int prime15[10][10][100][6];
    int nprime15[10][10];
    
    int prime124[10][10][10][100][6];
    int nprime124[10][10][10];
    
    void dfs1();
    void dfs2();
    void dfs3();
    void dfs4();
    void dfs5();
    void dfs6();
    void dfs7();
    
    ifstream fin("prime3.in");
    ofstream fout("prime3.out");
    
    void addPrime(int s){
        int i, k=1, tmp[6];
        int num = s;
        while(num!=0){
            tmp[k] = num/DIV[k];
            num = num%DIV[k];
            k++;
        }
        int c =0;
        for(i=1; i<=5; ++i)
            c += tmp[i];
        if(c == sum){
            primes[s]=true;
            for(i=1; i<=5; ++i){
                int t = nprime1[tmp[1]];
                prime1[tmp[1]][t][i] = tmp[i];
            }
            nprime1[tmp[1]]++;
    
            for(i=1; i<=5; ++i){
                int t = nprime3[tmp[3]];
                prime3[tmp[3]][t][i] = tmp[i];
            }
            nprime3[tmp[3]]++;
    
            bool flag=true;
            for(i=1; i<=5; ++i){
                if(tmp[i]==0){
                    flag=false;
                    break;
                }
                int t = nprime15[tmp[1]][tmp[5]];
                prime15[tmp[1]][tmp[5]][t][i] = tmp[i];
            }
            if(flag)
                nprime15[tmp[1]][tmp[5]]++;
            
            for(i=1; i<=5; ++i){
                int t = nprime124[tmp[1]][tmp[2]][tmp[4]];
                prime124[tmp[1]][tmp[2]][tmp[4]][t][i] = tmp[i];
            }
            nprime124[tmp[1]][tmp[2]][tmp[4]]++;
    
        }
    }
    
    int map[6][6];
    int ans[1000][6][6];
    int cnt=0;
    
    bool inline larger_than(int a[6][6], int b[6][6]){
        for(int i=1; i<=5; ++i)
            for(int j=1; j<=5; ++j)
                if(a[i][j]>b[i][j])
                    return true;
                else if(a[i][j]<b[i][j])
                    return false;
                else 
                    continue;
        return false;
    }
    
    void addResult(){
        int p = ++cnt;
        while(p!=0 && larger_than(ans[p-1], map)){
            memcpy(ans[p], ans[p-1], sizeof(int)*36);
            p--;
        }
        memcpy(ans[p], map, sizeof(int)*36);
    }
    
    int isPrime(int a){
        int n = static_cast<int>(sqrt(a));
        for(int i=2; i<=n; ++i)
            if(!(a%i))
                return 0;
        return 1;
    }
    
    int d=0;
    void initPrime(){
        for(int i=10001; i<=99999; ++i)
            if(isPrime(i))
                addPrime(i);
    }
    
    bool check1(int r){
        int i,sum=0;
        for(i=1; i<=5; ++i)
            sum = sum*10+map[r][i];
        
        if(!primes[sum]) return false;
    
        return true;
    }
    
    bool check2(int c){
    
        int i,sum=0;
        for(i=1; i<=5; ++i)
            sum = sum*10+map[i][c];
    
        if(!primes[sum]) return false;
        
        return true;
    }
    
    void dfs1(){
        int t = nprime1[map[1][1]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=2; j<=5; ++j)
                    map[j][j] = prime1[map[1][1]][i][j];
    
                dfs2();
            }
    }
    
    void dfs2(){
        int t = nprime3[map[3][3]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=1; j<=5; ++j)
                    map[6-j][j] = prime3[map[3][3]][i][j];
    
                dfs3();
            }
    }
    
    void dfs3(){
        int t = nprime15[map[1][1]][map[1][5]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=2; j<=4; ++j)
                    map[1][j] = prime15[map[1][1]][map[1][5]][i][j];
    
            dfs4();
            }
    }
    
    void dfs4(){
        int t = nprime124[map[1][2]][map[2][2]][map[4][2]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=3; j<=5; ++j)
                    map[j][2] = prime124[map[1][2]][map[2][2]][map[4][2]][i][j];
    
                dfs5();
            }
    }
    
    void dfs5(){
        int t = nprime124[map[1][4]][map[2][4]][map[4][4]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=3; j<=5; ++j)
                    map[j][4] = prime124[map[1][4]][map[2][4]][map[4][4]][i][j];
    
                for(int k=1; k<=9; k+=2){
                    map[5][3]=k;
    
                    if(check1(5))
                        dfs6();
                }
            }
    }
    
    void dfs6(){
        int t = nprime15[map[1][1]][map[5][1]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=2; j<=4; ++j)
                    map[j][1] = prime15[map[1][1]][map[5][1]][i][j];
    
                for(int k=1; k<=9; k+=2){
                    map[3][5] = k;
    
                    if(check1(3))
                        dfs7();
                }
            }
    }
    
    void dfs7(){
        int t = nprime124[map[2][1]][map[2][2]][map[2][4]];
        if(t==0)
            return;
        else
            for(int i=0; i<t; ++i){
                for(int j=3; j<=5; ++j)
                    map[2][j] = prime124[map[2][1]][map[2][2]][map[2][4]][i][j];
    
                for(int a=0; a<=9; ++a){
                    map[4][3]=a;
                    if(check2(3))
                        for(int b=1; b<=9; b+=2){
                            map[4][5] = b;
    
                            if(check1(4) && check2(5) )
                                addResult();
                        }
                }
            }
    }
    
    
    void output(){
        for(int k=0; k<cnt-1; ++k){
            for(int i=1; i<=5; ++i){
                for(int j=1; j<=5; ++j)
                    fout<<ans[k][i][j];
                fout<<endl;
            }
            if(cnt==1)
                return;
            fout<<endl;
        }
    
        for(int i=1; i<=5; ++i){
            for(int j=1; j<=5; ++j)
                fout<<ans[cnt-1][i][j];
            fout<<endl;
        }
    }
    
    int main(){
    
        //input
        fin>>sum>>map[1][1];
    
        //init
        for(int i=1; i<=5; ++i)
            for(int j=1; j<=5; ++j)
                ans[0][i][j] = 9;
        initPrime();
    
        //solve
        dfs1();
    
        //output
        output();
    
        return 0;
    }
    #include <iostream>
    #include <fstream>
    #define MAX 101
    using namespace std;
    ifstream fi("race3.in");
    ofstream fo("race3.out");
     
    int adjl[MAX][MAX];
    int ans[MAX][2];
    bool used[MAX],tused[MAX];
    int N,start,end;
     
    void init()
    {
        int a=0,i=0;
        while (a!=-1)
        {
            fi >> a;
            while (a>=0)
            {
                adjl[i][ ++adjl[i][0] ]=a;
                used[a]=true;
                fi >> a;
            }
            i++;
        }
        N=i-2;
        for (i=0;i<=N;i++)
        {
            if (adjl[i][0]==0)
                end=i;
            if (!used[i])
                start=i;
        }
    }
     
    void dfs3(int i)
    {
        int k,j;
        for (k=1;k<=adjl[i][0];k++)
        {
            j=adjl[i][k];
            if (!tused[j])
            {
                tused[j]=true;
                dfs3(j);
            }
        }
    }
     
    void dfs2(int i)
    {
        int k,j;
        for (k=1;k<=adjl[i][0];k++)
        {
            j=adjl[i][k];
            if (!used[j])
            {
                used[j]=true;
                dfs2(j);
            }
        }
    }
     
    void question2()
    {
        int i,j,k;
        for (i=1;i<=N-1;i++)
        {
            memset(used,0,sizeof(used));
            memset(tused,0,sizeof(tused));
            dfs2(i);
            tused[i]=true;
            tused[0]=true;
            dfs3(0);
            k=1;
            for (j=0;j<=N;j++)
                if (j!=i && used[j] && tused[j])
                {
                    k=0;
                    break;
                }
            if (k)
                ans[ ++ans[0][1] ][1]=i;
        }
    }
     
    void dfs1(int i)
    {
        int k,j;
        for (k=1;k<=adjl[i][0];k++)
        {
            j=adjl[i][k];
            if (!used[j])
            {
                used[j]=true;
                dfs1(j);
            }
        }
    }
     
    void question1()
    {
        int i;
        for (i=1;i<=N-1;i++)
        {
            memset(used,0,sizeof(used));
            used[i]=true;
            dfs1(0);
            if (!used[N])
                ans[ ++ans[0][0] ][0]=i;
        }
    }
     
    void print()
    {
        int i;
        fo << ans[0][0];
        for (i=1;i<=ans[0][0];i++)
            fo <<' ' << ans[i][0];
        fo << endl;
        fo << ans[0][1];
        for (i=1;i<=ans[0][1];i++)
            fo <<' ' << ans[i][1];
        fo << endl;
        fi.close();
        fo.close();
    }
     
    int main()
    {
        init();
        question1();
        question2();
        print();
        return 0;
    }
  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3513818.html
Copyright © 2011-2022 走看看