[Swust OJ 603]--吃饺子大王
2015-06-12 20:45
288 查看
题目链接:http://acm.swust.edu.cn/problem/603/
Time limit(ms): 1000 Memory limit(kb): 65535
同学们还记得我们班大一时举行的吃饺子大赛这个有趣的活动吧,相信这次活动会给软件0604班的同学们留下一生的美好回忆。
现在,作为大赛的评委henry,遇到了一个难题,就是他在统计一个小组同学每个人吃饺子数量的时候,这个小组的同学并没有明确的给出自己吃饺子的准确数量,估计是自己吃的太多了数不清了^_^,他们只是给出了与同一组其他组员吃饺子数量上的关系,为了简单起见,只有‘+’‘-’两种数量上的关系。
Description
第一行输入的是该小组成员的数量N(2到10之间),即分别编号为1到N。接下来2到N行给出的是编号为2到N的同学对自己吃饺子数量上的描述。如第二行的“+,1,3”表示的是编号为2的同学比编号为1的同学多吃了3个饺子。由于编号为1同学的RP问题^_^,因此每组编号为1的同学都没有发言权。
Input
现在要求你根据组员的描述情况求出该组内吃饺子最多同学的编号,假设通过这些描述一定能求出该小组内吃饺子最多的成员编号。如果一个组内有多个同学吃饺子数量最大且相同,那么按编号从小到大的顺序输出即可,每个编号间有一个空格。
Output
Sample Input
Sample Output
Hint
解题思路:直解假定第一个的数量然后按照条件叠加就是,但是逻辑关系有点复杂,写代码差点把自己搞晕~~~
代码如下:
View Code
Time limit(ms): 1000 Memory limit(kb): 65535
同学们还记得我们班大一时举行的吃饺子大赛这个有趣的活动吧,相信这次活动会给软件0604班的同学们留下一生的美好回忆。
现在,作为大赛的评委henry,遇到了一个难题,就是他在统计一个小组同学每个人吃饺子数量的时候,这个小组的同学并没有明确的给出自己吃饺子的准确数量,估计是自己吃的太多了数不清了^_^,他们只是给出了与同一组其他组员吃饺子数量上的关系,为了简单起见,只有‘+’‘-’两种数量上的关系。
Description
第一行输入的是该小组成员的数量N(2到10之间),即分别编号为1到N。接下来2到N行给出的是编号为2到N的同学对自己吃饺子数量上的描述。如第二行的“+,1,3”表示的是编号为2的同学比编号为1的同学多吃了3个饺子。由于编号为1同学的RP问题^_^,因此每组编号为1的同学都没有发言权。
Input
现在要求你根据组员的描述情况求出该组内吃饺子最多同学的编号,假设通过这些描述一定能求出该小组内吃饺子最多的成员编号。如果一个组内有多个同学吃饺子数量最大且相同,那么按编号从小到大的顺序输出即可,每个编号间有一个空格。
Output
1 2 3 4 5 6 7 | 6 + 3 1 + 1 2 - 2 1 + 3 1 + 1 1 |
1 | 2 5 |
Hint
解题思路:直解假定第一个的数量然后按照条件叠加就是,但是逻辑关系有点复杂,写代码差点把自己搞晕~~~
代码如下:
#include <iostream> #include <algorithm> #include <cstring> using namespace std; struct node{ int no, ptr, x; char v; bool operator<(const node &tmp)const{ if (ptr != tmp.ptr) return ptr < tmp.ptr; return x < tmp.x; } }ss[11]; int main(){ int n, mpt[11], i, k = 0, maxn = -0x7ffffff; memset(mpt, 0, sizeof(mpt)); cin >> n; for (i = 1; i < n; i++){ cin >> ss[i].v >> ss[i].ptr >> ss[i].x; ss[i].no = i; } sort(ss + 1, ss + n); for (i = 1; i < n; i++){ switch (ss[i].v){ case '+':mpt[ss[i].no] = mpt[ss[i].ptr - 1] + ss[i].x; break; case '-':mpt[ss[i].no] = mpt[ss[i].ptr - 1] - ss[i].x; break; } } for (i = 0; i < n; i++) maxn = maxn>mpt[i] ? maxn : mpt[i]; for (i = 0; i < n; i++){ if (mpt[i] == maxn){ if (k++) cout << ' '; cout << i + 1; } } cout << endl; return 0; }
View Code
相关文章推荐
- Python安装出现2503 2502 问题解决!
- 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)
- 完美解决Keil MDK的注释乱码问题
- How To Use MySQL Easily In PHP
- JavaScript模板引擎学习分享
- [LeetCode] Longest Substring with At Most Two Distinct Characters
- Ubuntu14.04下asymptote使用中文标签设置
- [葫芦娃的成长之路]数据结构的预备知识
- hiho第四十九周——欧拉路·一
- Java并发编程--Fork/Join框架使用
- hdu 2121 Ice_cream’s world II (无定根最小树形图)
- acdream 1685 多民族王国(DFS,并查集)
- Hdu 4734 F(x) (数位dp)
- 约瑟夫环问题的解决
- 使用libvirt和qemu将pci pass through设备添加到虚拟机上
- HDU 5236 Article
- 月计划表
- Android活动条(actionbar)使用详解(一)
- 约瑟夫环问题的解决
- 月计划表