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
 
Sample Input
1
2 5
Sample Output
Hint
 
解题思路:直解假定第一个的数量然后按照条件叠加就是,但是逻辑关系有点复杂,写代码差点把自己搞晕~~~
代码如下:
 #include<iostream>
using namespace std;
#define inf -0x3f3f3f3f
struct node
{
int left, right, cur, num;
char ch;
}date[];
int main()
{
int n, i, j;
while (cin >> n)
{
int max = inf, k = ;
date[].num = , date[].right = ;
for (i = ; i <= n; i++)
{
cin >> date[i].ch >> date[i].left >> date[i].cur;
date[i].right = i;
date[i].num = inf;
}
for (i = ; i <= n; i++)
{
for (j = ; j <= n; j++)
{
if (date[date[j].right].num != inf&&date[date[j].left].num == inf)
{
if (date[date[j].right].ch == '+')
date[date[j].left].num = date[date[j].right].num - date[date[j].right].cur;
else
date[date[j].left].num = date[date[j].right].num + date[date[j].right].cur;
}
else if (date[date[j].right].num == inf&&date[date[j].left].num != inf)
{
if (date[date[j].right].ch == '+')
date[date[j].right].num = date[date[j].left].num + date[date[j].right].cur;
else
date[date[j].right].num = date[date[j].left].num - date[date[j].right].cur;
}
if (date[j].num > max)
max = date[j].num;
}
}
for (i = ; i <= n; i++)
{
if (date[i].num == max)
{
if (k++) cout << ' ';
cout << i;
}
}
cout << endl;
}
return ;
}

然后后来又想到了一点优化,先把输入数据按照多余对象(比谁多)排序,

给每一组数据加上当前成员编号,然后按成员编号,直接按关系式相加就是,具体的看代码~~

 #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[];
int main(){
int n, mpt[], i, k = , maxn = -0x7ffffff;
memset(mpt, , sizeof(mpt));
cin >> n;
for (i = ; i < n; i++){
cin >> ss[i].v >> ss[i].ptr >> ss[i].x;
ss[i].no = i;
}
sort(ss + , ss + n);
for (i = ; i < n; i++){
switch (ss[i].v){
case '+':mpt[ss[i].no] = mpt[ss[i].ptr - ] + ss[i].x; break;
case '-':mpt[ss[i].no] = mpt[ss[i].ptr - ] - ss[i].x; break;
}
}
for (i = ; i < n; i++)
maxn = maxn>mpt[i] ? maxn : mpt[i];
for (i = ; i < n; i++){
if (mpt[i] == maxn){
if (k++) cout << ' ';
cout << i + ;
}
}
cout << endl;
return ;
}

[Swust OJ 603]--吃饺子大王的更多相关文章

  1. [Swust OJ 589]--吃西瓜(三维矩阵压缩)

    题目链接:http://acm.swust.edu.cn/problem/589/ Time limit(ms): 2000 Memory limit(kb): 65535   Description ...

  2. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  3. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  4. <正则吃饺子>:关于java中垃圾回收技术的简单学习总结

    知识介绍来自网络,后面会根据继续学习进行补充和适当的修改,谢谢!原文地址:http://www.importnew.com/26821.html#comment-578355 java中的垃圾回收机制 ...

  5. 写完代码就去吃饺子|The 10th Henan Polytechnic University Programming Contest

    河南理工大学第十届校赛 很久没有组队打比赛了,好吧应该说很久没有写题了, 三个人一起玩果然比一个人玩有趣多了... 前100分钟过了4题,中途挂机100分钟也不知道什么原因,可能是因为到饭点太饿了?, ...

  6. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  7. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  8. [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)

    题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  9. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

随机推荐

  1. Android 开发笔记“Eclipse 调试和快捷键”

    原文地址:http://blog.sina.com.cn/s/blog_5cf876340100aswr.html Eclipse 调试器和 Debug 视图 Eclipse SDK 是针对 Java ...

  2. Sublime 配置&插件推荐

    sublime 配置&插件推荐 Sublime编辑器的新鲜特性同时选中多个 先选中一个 再Command + D Command + P @搜索函数 #搜索关键字迷你地图 安装package ...

  3. 射频识别技术漫谈(22)——RC系列射频芯片的寄存器操作

    前面提到,RC系列内部64个寄存器的正确操作是软件编写的关键.正确设置寄存器首先要做到与寄存器正确通信,其次是要对寄存器写入正确的值. RC系列射频芯片与微控制器的接口有并口和SPI接口两种类型.显然 ...

  4. 宣布发布 Windows Azure SDK 2.2,正式发布 Windows Azure Backup 和 Hyper-V 恢复管理器预览版

    开发人员正逐渐转向云计算,因为它具有众多优势,包括成本.自动化和让开发人员专注于应用程序逻辑的能力.我们很高兴地宣布,继推出 Visual Studio 2013 之后,今天将发布 Windows A ...

  5. JAVA FILE or I/O学习 - I/O流操作:FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream、InputStreamReader、OutputStreamWriter等

    public class IOStreamKnow { /*********************************文件读写方式:字节流**************************** ...

  6. 意大利奢侈品牌-Kiton 华丽进驻北京新光天地-时尚生活-泛高尔夫网

    意大利奢侈品牌-Kiton 华丽进驻北京新光天地-时尚生活-泛高尔夫网 意大利奢侈品牌-Kiton 华丽进驻北京新光天地

  7. iostream.h 和stdio.h区别

    stdio.h是C的标准I/O库,是以函数的方式向buffer写入或读取字符.输入输出是这样的printf(...);,scanf(...); iostream是C++的标准I/O库,引入了输入/输出 ...

  8. Fractal(递归,好题)

    Fractal Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8341   Accepted: 3965 Descripti ...

  9. find the most comfortable road(并差集,找差值最小的权值)

    find the most comfortable road Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  10. PE框架学习之道:PE框架——发送报文流程

    PE框架发送报文,适用于PE及VX技术 步骤: 1.在action中使用发送报文,要指定报文在router端的交易名称 2.如果使用supe.execute(context)来发送,不需要第一步 3. ...