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

/*ID: hubiao cavePROG: prime3LANG: 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;elsefor(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;elsefor(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;elsefor(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;elsefor(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;elsefor(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;elsefor(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;elsefor(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(){//inputfin>>sum>>map[1][1];//initfor(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;
}

转载于:https://www.cnblogs.com/cavehubiao/p/3513818.html

USACO 4.3 Street RaceThe Primes(跪了)相关推荐

  1. USACO 4.3.2 The Primes

    搜索加各种剪枝,很悲剧写了N个小时还是超时,只好弃坑了. (P.S. 谁能再告诉我一些优化思路...感激不尽...) 测试数据: ------- test 1 ---- 11 2 ------- te ...

  2. usaco street race(dfs)

    一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...

  3. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  4. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  5. 【Redfin SDE intern】跪经

    萌新的面试第一弹 Redfin是我求职生涯中的第一家,第一个电面,第一个onsite.除了结果不好,其他过程都很好... 春节当天风风火火去西雅图面试,之前分配的五个面试官其中有两个中国人,然而全部被 ...

  6. usaco Shaping Regions

    这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...

  7. usaco Postal Vans(dp)

    是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...

  8. usaco Beef McNuggets

    这两天贼烦,ccf炸了,还有一个烦心事.哎我都不知道自己能不能坚持下去了.马上期末考了.这段时间还是抓紧时间复习吧同时刷usaco的节奏要跟以前一样了,毕竟课少了. 题解: 只要你知道以下的数论结论, ...

  9. usaco前两章小结

    usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...

  10. usaco ★Fractions to Decimals 分数化小数

    ★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...

最新文章

  1. Vue Angular 双向绑定检测不到对象属性的添加和删除
  2. 3.浏览器输入www.baidu.com到显示主页的全过程
  3. pandas保存新增sheet表,且不overwrite原有内容
  4. padavan 源码
  5. 手把手带你撸深度学习经典模型(一)----- UNet
  6. 在SSH框架中,如何得到POST请求的URL和参数列表
  7. Android中导入第三方jar
  8. zyplayer-doc 1.0.1 发布,你家所需的文档管理工具他都承包了!
  9. ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
  10. c语言行列坐标是先行后j,C语言课后习题参考答案
  11. html图片逆时针转换,css3怎样做出逆时针旋转倒计时
  12. golang--channal与select
  13. 分享几款UI设计师快速提升工作效率的辅助设计软件
  14. win7如何启用计算机的无线功能,win7如何开启无线功能
  15. 控制反转(IoC)与依赖注入(DI)详解
  16. Word实现汉字和拼音分离
  17. 使用ICMP协议检测网络状态
  18. 饿汉单例、懒汉单例类
  19. java 解析 manifest_详解Manifest
  20. 聚观早报|知乎发布搜索聚合开始内测;苹果7月关闭我的照片流服务

热门文章

  1. 排序算法之二 插入排序(C++版本)
  2. string进行大小写转换
  3. leetcode探索队列和栈(一)
  4. 每天一道剑指offer-数组中出现次数超过一半的数字
  5. 怎么改掉科学计数法_宝宝口唇干裂怎么回事?该怎么办?
  6. java 定义三维列表_java 多维数据定义
  7. oracle+调整+表空间,oracle数据库表空间及权限调整示例
  8. 乔安监控电脑客户端_公司上网监控使用安装电脑监控软件?
  9. php 打印 域名ip_php如何获取域名IP地址代码函数
  10. stringbuffer java API_StringBuffer类