中南大学研究生复试机试题
题目不全,不分先后
1 惠民工程
题目描述
市政府“惠民工程”的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。
输入
测试输入包含若干测试用例。每个测试用例的第1行给出居民点数目M ( < =100 )、 评估的管道条数 N;随后的 N 行对应居民点间管道的成本,每行给出一对正整数,分别是两个居民点的编号,以及此两居民点间管道的成本(也是正整数)。为简单起见,居民点从1到M编号。
输出
对每个测试用例,在1行里输出全市管道畅通所需要的最低成本。若统计数据不足以保证畅通,则输出“?”。
样例输入
3 3
1 2 1
1 3 2
2 3 4
3 1
2 3 2
样例输出
3
?
代码
#使用并查集的Kruskal算法
#include <iostream>
#include <algorithm>
#define MAX 110
#define MAXN 100010using namespace std;int n, m, INF = 0x3f3f3f3f;
int fa[MAX];struct edge {int a, b, c;bool operator< (const edge& e) const {return c < e.c;}
} edge[MAXN];int find (int x) {return ((fa[x] == x) ? x : find(fa[x]));
}int kruskal () {sort(edge, edge + n);for (int i = 1; i <= m; i ++) fa[i] = i;int res = 0, cnt = 0;for (int i = 0; i < n; i ++) {int a = edge[i].a, b = edge[i].b, c = edge[i].c;a = find(a), b = find(b);if (a != b) {fa[a] = b;res += c;cnt ++;}}if (cnt < m - 1) return INF;return res;
} int main () {while (cin >> m >> n) {for (int i = 0; i < n; i ++) {cin >> edge[i].a >> edge[i].b >> edge[i].c;}int res = kruskal();if (res == INF) cout << "?" << endl;else cout << res << endl;}return 0;
}
2 回文串问题
题目描述
“回文串”是一个正读和反读都一样的字符串,字符串由数字和小写字母组成,比如“level”或者“abcdcba”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
输入
输入包含多个测试实例,每一行对应一个字符串,串长最多100字母。
输出
对每个字符串,输出它是第几个,如第一个输出为"case1: “;如果一个字符串是回文串,则输出"yes”,否则输出"no",在yes/no之前用一个空格。
样例输入
level
abcde
noon
haha
样例输出
case1: yes
case2: no
case3: yes
case4: no
代码
#动态规划
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 110using namespace std;string s;
int f[MAX][MAX];int main () {int cnt = 1;while (cin >> s) {memset(f, 1, sizeof f);int n = s.size();for (int i = n - 1; i >= 0; i --) {for (int j = i + 1; j < n; j ++) {f[i][j] = (s[i] == s[j]) && f[i + 1][j - 1];}}if (f[0][n - 1]) {printf("case%d: yes\n", cnt);} else {printf("case%d: no\n", cnt);}cnt ++;}return 0;
}
3 最少钱币数
题目描述
作为A公司的职员,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了。但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位职员发工资的时候都不用老师找零呢?这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
输入
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<=100),表示老师的人数,然后是n个老师的工资(工资<5000)。
输出
每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。
样例输入
3
1 2 3
2
1 2
样例输出
4
2
代码
#可以简单地使用贪心,从100开始除,这里想试试low_bound+回溯的写法
#include <iostream>using namespace std;int n;
int m[6] = {1, 2, 5, 10, 50, 100};int lowbound (int mount) {int l = 0, r = 6;int mid;while (l < r) {mid = l + r >> 1;if (m[mid] > mount) r = mid;else l = mid + 1;}return m[l - 1];
}int f (int mount, int cnt) {// 查找第一个小于等于的if (!mount) return cnt;int d = lowbound(mount);return f(mount - d, cnt + 1);
}int main () {while (cin >> n) {int ans = 0;while (n --) {int t;cin >> t;ans += f(t, 0);} cout << ans << endl;}return 0;
}
4 最大连续子序列
题目描述
给定 K 个整数的序列{ N1, N2, …, NK } ,其任意连续子序列可表示为{ Ni, Ni+1,…,Nj} ,其中1 <= i<= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 } ,其最大连续子序列为{ 11, -4, 13 } ,最大和为20。编写程序得到其中最大子序列的和并输出该子序列的第一个和最后一个元素的下标。
输入
测试输入包含若干测试用例,每个测试用例占2 行,第 1 行给出正整数 K( <100000) ,第 2 行给出 K 个整数,每个整数的范围-10000至10000 ,中间用空格分隔。
输出
对每个测试用例, 在 1 行里输出最大和、 最大连续子序列的第一个和最后一个元素的下标,中间用空格分隔。 如果最大连续子序列不唯一, 则输出序号 i 和 j 最小的那个(如输入样例的第 2、3组)。若所有 K 个元素都是负数,则定义其最大和为0,输出"0 0 0"。
样例输入
8
6 -2 11 -4 13 -5 -2 10
20
-10 1 2 3 4 -5 -23 3 7 -21 6 5 -8 3 2 5 0 1 10 3
8
-1 -5 -2 3 -1 0 -2 0
4
-1 -2 -4 -3
样例输出
27 0 7
27 10 19
3 3 3
0 0 0
代码
在这里插入代码片
5 安全路径
题目描述
卫斯理小说经常提及外星人,比如蓝血人。 在土星星球有很多城市,每个城市之间有一条或多条飞行通道, 但是并不是所有的路都是很安全的,每一条路有一个安全系数 s,s 是在 0和1 间的实数 (包括 0 , 1) ,一条从 u 到 v 的通道 P 的安全度为 Safe§ = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在蓝血人想出去旅游,面对这这么多的路,他想找一条最安全的路。但是蓝血人的数学不好,想请你帮忙。
输入
输入包括多个测试实例,每个实例包括:
第一行: 一个整数 n。 n 表示城市的个数 n<=1000;
接着是一个 n*n 的矩阵表示两个城市之间的安全系数, (0可以理解为那两个城市之间没有直接的通道 )。
接着是一个整数m (m<=100)表示若干个蓝血人要旅游的路线 ,下面每行有两个数字,表示蓝血人所在的城市和要去的城市。
输出
如果蓝血人无法达到他的目的地,输出 “What a pity!” ,
其他的输出这两个城市之间的最安全道路的安全系数,保留三位小数。
样例输入
3
1 0.5 0.5
0.5 1 0.4
0.5 0.4 1
3
1 2
2 3
1 3
样例输出
0.500
0.400
0.500
代码
#dijstra
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;#define MAX 1010int n, vis[MAX];
double g[MAX][MAX], d[MAX];int dijkstra(int x, int y) {memset(vis, 0, sizeof vis);fill(d, d + MAX, 0);d[x] = 1;if (x == y) return 1;for (int i = 1; i <= n; i ++) {int u = -1;double maxn = 0; for (int j = 1; j <= n; j ++) {if(!vis[j] && d[j] > maxn) {u = j;maxn = d[j];}}if (u == -1) return -1;if (u == y) return 1;vis[u] = 1;for (int v = 1; v <= n; v ++)if(!vis[v] && g[v][u] && d[v] < d[u] * g[v][u])d[v] = d[u] * g[v][u];}
}int main() {while (cin >> n) {int i, j, m, x, y;for (int i = 1; i <= n; i ++)for (int j = 1; j <= n; j ++)cin >> g[i][j];cin >> m;for (int i = 0; i < m; i ++) {cin >> x >> y;int res = dijkstra(x, y);if (res == -1)cout << "What a pity!" << endl;else printf("%.3lf\n", d[y]);} }return 0;
}
中南大学研究生复试机试题相关推荐
- 1028: 安全路径(2014年中南大学研究生复试机试题 )
1028: 安全路径 时间限制: 1 Sec 内存限制: 128 MB 提交: 228 解决: 96 [提交][状态][讨论版] 题目描述 卫斯理小说经常提及外星人,比如蓝血人. 在土星星球有很多 ...
- 2018年 中南大学研究生复试机试题(1025~ 1028)
目录: A:最短距离 B:a + b问题 C:逃离迷宫 D:可乐 A:最短距离 http://39.106.164.46/problem.php?id=1025 思路: 设小王的坐标为(x1 + u1 ...
- 2014年中南大学研究生复试机试题(字符串、基础dp、最短路)
A.B.C题很简单. D.最大连续子序列 思路: 求最大连续子序列的值以及左右端点. 那么我们记录连续和值为s,最值为maxx,只有maxx改变时才改变左右端点,考虑记录l,r,即当前的区间端点. 那 ...
- 1019: 堆石子 2016年中南大学研究生复试机试题
题目描述 在一片沙滩上摆放着 n堆石子. 现要将石子有次序地合并成一堆. 规定每次选2 堆相邻石子合并成新的一堆,合并的费用为新的一堆石子数.试设计一个算法,计算出将 n堆石子合并成一堆的最小总费用. ...
- 2016年中南大学研究生复试机试题(1015~1019)
目录: **A:第几天 B:加油站 C:序列求平均 D:士兵排阵 ** A:第几天 http://39.106.164.46/problem.php?id=1015 思路: 分闰年和非闰年讨论即可. ...
- 中南大学2019研究生复试机试题
中南大学2019研究生复试机试题 机试题共六题 1.选球问题 题目描述 输入 输出 样例输入 样例输出 解决代码 2.模拟出入栈游戏 题目描述 输入 输出 样例输入 样例输出 解决代码 3.爬楼梯游戏 ...
- 1004: 惠民工程 (2013年中南大学研究生复试机试 )
1004: 惠民工程 时间限制: 1 Sec 内存限制: 128 MB 提交: 404 解决: 81 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 市政府"惠民工程&q ...
- 1028-可乐(中南大学18年研究生复试机试题)
题目描述 猪年快乐!在这个快乐的日子里我们当然要去超市买可乐喝啦! 现在超市有n种可乐,第 i 种可乐的价格为C[i] ,体积为 2i-1 毫升,每种可乐都是无限供应的 ,现在你想买至少 L毫升的可乐 ...
- 13-19年复旦大学计算机学院研究生复试机试题
(不保证代码完全正确,自己敲的可能存在不完善的地方,请各位大佬发现后指出,谢谢!) 暂时结束. 试题列表 2019上机题 2018上机题 2017上机题 2016上机题 2015上机题 2014上机题 ...
- 华科研究生复试机试题代码堆积供以后参考
#include "stdafx.h" #include <cstdio> #include <cstring> using namespace std;# ...
最新文章
- 数据结构--树形结构
- 浅谈C#中一种类插件系统编写的简单方法(插件间、插件宿主间本身不需要通信)...
- 聪明女人的七个致富之道,学会它你也能成为人人羡慕的小富婆
- office2003 office2007同时安装 配置问题的解决
- MySQL练习题(经典50题)
- 【181129】VC++ 屏幕截取(窗口截图、选区截图)、屏幕拾色器、放大镜源代码
- 阿里云服务器搭建 Redis 集群
- JavaSE第八章 IO流
- Shallow heap Retained heap
- 股票涨跌的心理学原理: 过度反应理论
- 告别Ubuntu,与Win 10闹别扭
- 第4章 数据的概括性度量
- 工作两周年记------今晚和三个兄弟一起痛快地喝了一次, 在《祝你一路顺风》的旋律中!
- Hadoop综合试题5
- steam在matlab是什么,什么是STEAM,和STEM有何区别?
- 十款经典微信小程序源码分享之二(可作为计算机设计参考)
- 啦啦~~~记录江苏省C等级考试相关题目
- CSMA/CD中重传与冲突检测机制
- 移动OA系统有哪些特点是PC端所无法替代的?
- poj 3323 Matrix Power Series (矩阵乘法 非递归形式)