EOJ - 我决不会TLE (一个智障的题目)
2018-01-22 17:27
253 查看
Time limit per test: 2.5 seconds
Memory limit: 256 megabytes
题目描述
xxx 写了一份用 DFS 求有向无环图中顶点 1 到 n 最短路的代码,出乎意料的是这份代码竟然通过了所有测试点。于是你暗地里把出题人骂了一通,然后决定造个数据把这个假算法卡掉。
核心代码如下:
Output
第一行两个数 n,m,分别表示图中点的个数和边的条数。(1≤n≤50,1≤m≤100)
之后 m 行,每行两个数 u,v,表示顶点 u→v 有一条有向边。 (1≤u,v≤n)
要求:
存在 1 到 n 的路径。
不能有重边。
不能有环。
xxx 的算法会给出错误解或者运行超时(时限是 2 秒)。
Examples
input
Sample
output
7 8
6 7
1 2
1 3
2 4
2 5
3 5
4 6
5 6
Note
样例给出了一种可能的输出(不是正确的输出)。
题解
看完这个题目真的是摸不着头脑,怪事年年有,这是让我干嘛???我怎么输出???
因为第一次做这么智障的题目,我想把这个题目记录下来。
如标题嘛,主要就是卡算法的时间,一秒约摸着执行10^6~10^7次代码吧。因为对于这个样例算法,只要让他最短路有多解,他的执行效率是最低的,所以,我们在中间层加很多的等路径的点。例如 1 和 n 之间加入 24 个中间层,每层两个顶点,前一层的顶点与后一层的顶点连边。在这种情况下,1 到 n 的最短路条数有 2^24 种。
代码
Memory limit: 256 megabytes
题目描述
xxx 写了一份用 DFS 求有向无环图中顶点 1 到 n 最短路的代码,出乎意料的是这份代码竟然通过了所有测试点。于是你暗地里把出题人骂了一通,然后决定造个数据把这个假算法卡掉。
核心代码如下:
global variable: answer_now function dfs(u, distance_now) if distance_now >= answer_now then return if u == n then answer_now = distance_now return for each u->v in edges dfs(v, dist + 1) function find_shortest_path() answer_now = INFINITY dfs(1, 0) return answer_now
Output
第一行两个数 n,m,分别表示图中点的个数和边的条数。(1≤n≤50,1≤m≤100)
之后 m 行,每行两个数 u,v,表示顶点 u→v 有一条有向边。 (1≤u,v≤n)
要求:
存在 1 到 n 的路径。
不能有重边。
不能有环。
xxx 的算法会给出错误解或者运行超时(时限是 2 秒)。
Examples
input
Sample
output
7 8
6 7
1 2
1 3
2 4
2 5
3 5
4 6
5 6
Note
样例给出了一种可能的输出(不是正确的输出)。
题解
看完这个题目真的是摸不着头脑,怪事年年有,这是让我干嘛???我怎么输出???
因为第一次做这么智障的题目,我想把这个题目记录下来。
如标题嘛,主要就是卡算法的时间,一秒约摸着执行10^6~10^7次代码吧。因为对于这个样例算法,只要让他最短路有多解,他的执行效率是最低的,所以,我们在中间层加很多的等路径的点。例如 1 和 n 之间加入 24 个中间层,每层两个顶点,前一层的顶点与后一层的顶点连边。在这种情况下,1 到 n 的最短路条数有 2^24 种。
代码
#include <bits/stdc++.h> using namespace std; int main() { srand( (unsigned)time( NULL ) ); int n=rand()%7+44;//n的取值范围[44,50] cout<<n<<" "<<2*n-4<<endl; cout<<1<<" "<<2<<endl; cout<<1<<" "<<3<<endl; for(int i=2;i<n-2;i++){ if(i%2){//odd cout<<i<<" "<<i+1<<endl; cout<<i<<" "<<i+2<<endl; }else{ cout<<i<<" "<<i+2<<endl; cout<<i<<" "<<i+3<<endl; } } cout<<n-2<<" "<<n<<endl; cout<<n-1<<" "<<n<<endl; }
相关文章推荐
- 一个CCIE都不会的题目?
- 阿里巴巴Java程序员面试的11个题目,网友:居然一个都不会!
- 阿里巴巴Java程序员面试的11个题目,网友:居然一个都不会!
- 一个不会OOM的毛玻璃效果
- 题目:设计一个鼠标点击速度比赛游戏。 1)显示一个按钮和文本框。 2)文本框显示鼠标点击次数
- 一个关于SQL语句的练习题目
- 题目:把一个英语句子中的单词次序颠倒后输出
- C# 一次只能打开一个应用程序,再次打开,不会打开新应用程序
- 题目描述:给定一个字符串,求出其所有可能的字符组合. 比如:abc 其所有组合是:a,b,c,ab,ac,bc,abc
- 题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。
- 另外,Volley中所有的请求都在一个额外线程中执行,而不会阻塞你的“主线程”。
- 【算法题】题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。 求总共有多少总跳法,并分析算法的时间复杂度
- 【算法题目】用两个栈实现一个队列
- 假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 而已」
- 机器学习:核函数的一个小题目
- 一个程序员面试题目的简单分析
- java extends & implements 一个一般不会注意到的重要区别
- 【程序17】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
- using 语句定义一个范围,在此范围的末尾将自动释放对象,这样就不会占用太多的资源
- 对OJ题目一个总结(一)