奇怪的考试题
题目名称 | 数值距离 | 最短路 | 放棋子 |
可执行文件名 | dis | road | chess |
输入文件名 | dis.in | road.in | chess.in |
输出文件名 | dis.out | road.out | chess.out |
内存限制 | 256MB | 256MB | 256MB |
每个测试点时限 | 2s | 1s | 1s |
测试点数目 | 10 | 10 | 10 |
每个测试点分值 | 10 | 10 | 10 |
是否有部分分 | 无 | 无 | 无 |
题目类型 | 传统 | 传统 | 传统 |
备注 | 无 | 捆绑测试 | 捆绑测试 |
提交文件名需加后缀:
对于pascal语言 | dis.pas | road.pas | chess.pas |
对于C语言 | dis.c | road.c | chess.c |
对于C++语言 | dis.cpp | road.cpp | chess.cpp |
数值距离(dis.pas/c/cpp)
【题目大意】
我们可以对一个数x进行两种操作:
1、 选择一个质数y,将x变为x*y
2、 选择一个x的质因数y,将x变为x/y
定义两个数a,b之间的距离为把a变成b所需要执行的最少操作次数。例如数69与42之间的距离为3,因为42=69/23*2*7
现在有一个长度为n的序列a1,a2,…,an。对于每一个i,我们需要找到一个j,使得ai到aj的距离最小,若有多个j满足条件,输出最小的j。
【输入文件】
输入文件为dis.in。
输入共有n+1行,第一行有一个数n,接下来n行每行一个数ai。
【输出文件】
输出文件为dis.out。
输出一共n行,每行一个整数,第i行的整数表示对于i所求得的j是多少。
【样例输入】
6
1
2
3
4
5
6
【样例输出】
2
1
1
2
1
2
【数据规模与约定】
对于30%的数据,n≤1000;
另有20%的数据,ai≤1000;
对于100%的数据,2≤n≤100000,1≤ai≤1000000。
最短路(road.pas/c/cpp)
【题目大意】
有一个点数为n,边数为m的无向图,点的编号为1到n。边的权值均为非负数。
现在请你求出从点1到点n的最短路径条数,若有无限条则输出-1,答案对于1000000009取模(即109+9)。
【输入文件】
输入文件为road.in。
输入共有m+1行。
第一行有两个整数n,m,表示图中所有的点数与边数。
接下来的m行,每行三个整数x,y,z,表示了一条边的起点、终点以及该边的长度。
【输出文件】
输出文件为road.out。
输出一个整数表示从点1至点n的最短路径条数,答案对于1000000009取模。
【样例输入】
4 4
1 2 1
1 3 1
2 4 1
3 4 1
【样例输出】
2
【数据规模与约定】
对于10%的数据,n≤10,m≤10;
对于40%的数据,n≤1000,m≤2000;
对于100%的数据,n≤100000,m≤200000;
保证到任意一点最短路的长度不超过64位有符号长整型范围。
放棋子(chess.pas/c/cpp)
【题目大意】
现在有一个n*m的棋盘,现在你需要在棋盘上摆放2n个棋子,要求满足如下条件:
1、 每一列只能有一个棋子;
2、 每一行的前xi个格子有一个棋子,而且最多有一个棋子;
3、 每一行的后yi个格子有一个棋子,而且最多有一个棋子;
求一共有多少种不同的放置方案,答案对于1000000007取模(即109+7)。
【输入文件】
输入文件为chess.in。
输入共有n+1行。第一行有两个整数n,m,表示该棋盘的行数与列数。
接下来的n行,每行两个整数xi和yi,表示每一行的前xi个格子需要有一个棋子,每一行的后yi个格子需要有一个棋子。
【输出文件】
输出文件为chess.out。
输出一个整数表示共有多少种不同的方案,答案对于1000000007取模。
【样例输入】
3 6
1 2
3 3
3 2
【样例输出】
4
【数据规模与约定】
数据点 | n最大值 | m最大值 | 其他 |
1 | 4 | 12 | 无 |
2 | 10 | 50 | 无 |
3 | 50 | 200 | 所有xi相等,所有yi相等 |
4 | 50 | 200 | 所有xi相等 |
5 | 50 | 200 | 所有yi相等 |
数据点 | n最大值 | m最大值 | 其他 |
6 | 50 | 200 | max(left)+max(right)≤m |
7 | 50 | 200 | max(left)+max(right)≤m |
8 | 50 | 200 | 无 |
9 | 50 | 200 | 无 |
10 | 50 | 200 | 无 |