USACO 4.3 Street RaceThe Primes(跪了)
涉及到的图的题目不会,贴个别人代码先过了,晕,这几天真是烦死了。
/*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(跪了)相关推荐
- USACO 4.3.2 The Primes
搜索加各种剪枝,很悲剧写了N个小时还是超时,只好弃坑了. (P.S. 谁能再告诉我一些优化思路...感激不尽...) 测试数据: ------- test 1 ---- 11 2 ------- te ...
- usaco street race(dfs)
一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 【Redfin SDE intern】跪经
萌新的面试第一弹 Redfin是我求职生涯中的第一家,第一个电面,第一个onsite.除了结果不好,其他过程都很好... 春节当天风风火火去西雅图面试,之前分配的五个面试官其中有两个中国人,然而全部被 ...
- usaco Shaping Regions
这就是usaco 前面的windows area的变形. /* ID:jinbo wu TASK:rect1 LANG:C++ */ #include<iostream> #include ...
- usaco Postal Vans(dp)
是哈密顿回路,然后...就不知道怎么写了 ,以前写过类似的不过情况没这么多也没这么复 usaco training 6.1.1 Postal Vans 题解 标签: usaco training题解d ...
- usaco Beef McNuggets
这两天贼烦,ccf炸了,还有一个烦心事.哎我都不知道自己能不能坚持下去了.马上期末考了.这段时间还是抓紧时间复习吧同时刷usaco的节奏要跟以前一样了,毕竟课少了. 题解: 只要你知道以下的数论结论, ...
- usaco前两章小结
usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...
- usaco ★Fractions to Decimals 分数化小数
★Fractions to Decimals 分数化小数 写一个程序,输入一个形如 N/D 的分数(N 是分子,D 是分母),输出它的小数形式. 如果小数有循环节的话,把循环节放在一对圆括号中.例如, ...
最新文章
- Vue Angular 双向绑定检测不到对象属性的添加和删除
- 3.浏览器输入www.baidu.com到显示主页的全过程
- pandas保存新增sheet表,且不overwrite原有内容
- padavan 源码
- 手把手带你撸深度学习经典模型(一)----- UNet
- 在SSH框架中,如何得到POST请求的URL和参数列表
- Android中导入第三方jar
- zyplayer-doc 1.0.1 发布,你家所需的文档管理工具他都承包了!
- ORACLE HANDBOOK系列之五:PL/SQL中的集合类型(Collections in PL/SQL)
- c语言行列坐标是先行后j,C语言课后习题参考答案
- html图片逆时针转换,css3怎样做出逆时针旋转倒计时
- golang--channal与select
- 分享几款UI设计师快速提升工作效率的辅助设计软件
- win7如何启用计算机的无线功能,win7如何开启无线功能
- 控制反转(IoC)与依赖注入(DI)详解
- Word实现汉字和拼音分离
- 使用ICMP协议检测网络状态
- 饿汉单例、懒汉单例类
- java 解析 manifest_详解Manifest
- 聚观早报|知乎发布搜索聚合开始内测;苹果7月关闭我的照片流服务
热门文章
- 排序算法之二 插入排序(C++版本)
- string进行大小写转换
- leetcode探索队列和栈(一)
- 每天一道剑指offer-数组中出现次数超过一半的数字
- 怎么改掉科学计数法_宝宝口唇干裂怎么回事?该怎么办?
- java 定义三维列表_java 多维数据定义
- oracle+调整+表空间,oracle数据库表空间及权限调整示例
- 乔安监控电脑客户端_公司上网监控使用安装电脑监控软件?
- php 打印 域名ip_php如何获取域名IP地址代码函数
- stringbuffer java API_StringBuffer类