swust oj 603--吃饺子大王

题目链接: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

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

解题思路:直解假定第一个的数量然后按照条件叠加就是,但是逻辑关系有点复杂,写代码差点把自己搞晕~~~

代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 #define inf -0x3f3f3f3f
 4 struct node
 5 {
 6     int left, right, cur, num;
 7     char ch;
 8 }date[11];
 9 int main()
10 {
11     int n, i, j;
12     while (cin >> n)
13     {
14         int max = inf, k = 0;
15         date[1].num = 0, date[1].right = 1;
16         for (i = 2; i <= n; i++)
17         {
18             cin >> date[i].ch >> date[i].left >> date[i].cur;
19             date[i].right = i;
20             date[i].num = inf;
21         }
22         for (i = 1; i <= n; i++)
23         {
24             for (j = 1; j <= n; j++)
25             {
26                 if (date[date[j].right].num != inf&&date[date[j].left].num == inf)
27                 {
28                     if (date[date[j].right].ch == ‘+‘)
29                         date[date[j].left].num = date[date[j].right].num - date[date[j].right].cur;
30                     else
31                         date[date[j].left].num = date[date[j].right].num + date[date[j].right].cur;
32                 }
33                 else if (date[date[j].right].num == inf&&date[date[j].left].num != inf)
34                 {
35                     if (date[date[j].right].ch == ‘+‘)
36                         date[date[j].right].num = date[date[j].left].num + date[date[j].right].cur;
37                     else
38                         date[date[j].right].num = date[date[j].left].num - date[date[j].right].cur;
39                 }
40                 if (date[j].num > max)
41                     max = date[j].num;
42             }
43         }
44         for (i = 1; i <= n; i++)
45         {
46             if (date[i].num == max)
47             {
48                 if (k++) cout << ‘ ‘;
49                 cout << i;
50             }
51         }
52         cout << endl;
53     }
54     return 0;
55 }

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

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

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 struct node{
 6     int no, ptr, x;
 7     char v;
 8     bool operator<(const node &tmp)const{
 9         if (ptr != tmp.ptr)
10             return ptr < tmp.ptr;
11         return x < tmp.x;
12     }
13 }ss[11];
14 int main(){
15     int n, mpt[11], i, k = 0, maxn = -0x7ffffff;
16     memset(mpt, 0, sizeof(mpt));
17     cin >> n;
18     for (i = 1; i < n; i++){
19         cin >> ss[i].v >> ss[i].ptr >> ss[i].x;
20         ss[i].no = i;
21     }
22     sort(ss + 1, ss + n);
23     for (i = 1; i < n; i++){
24         switch (ss[i].v){
25         case ‘+‘:mpt[ss[i].no] = mpt[ss[i].ptr - 1] + ss[i].x; break;
26         case ‘-‘:mpt[ss[i].no] = mpt[ss[i].ptr - 1] - ss[i].x; break;
27         }
28     }
29     for (i = 0; i < n; i++)
30         maxn = maxn>mpt[i] ? maxn : mpt[i];
31     for (i = 0; i < n; i++){
32         if (mpt[i] == maxn){
33             if (k++) cout << ‘ ‘;
34             cout << i + 1;
35         }
36     }
37     cout << endl;
38     return 0;
39 }

时间: 2024-10-14 05:09:21

swust oj 603--吃饺子大王的相关文章

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

题目链接:http://acm.swust.edu.cn/problem/589/ Time limit(ms): 2000 Memory limit(kb): 65535 Description 告诉你们一个好消息,Wraith前几天天得到一块西瓜,但是是长方体形的.... Wraith发现这块西瓜长m厘米,宽n厘米,高h厘米.他发现如果把这块西瓜平均地分成m*n*h块1立方厘米的小正方体,那么每一小块都会有一个营养值(可能为负,因为西瓜是有可能坏掉的,但是绝对值不超过200). 现在Wrai

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

SWUST OJ Euclid&#39;s Game(0099)

Euclid's Game(0099) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1855 Accepted: 589 Description Starts with two unequal positive numbers (M,N and M>N) on the board. Two players move in turn. On each move, a player has to write on the boar

swust oj 649--NBA Finals(dp,后台略(hen)坑)

题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two teams, Lakers and Celtics, playing a series of NBA Finals until one of the teams wins n games. Assume that the probability of Lakers winning a game is

今天冬至,该吃饺子了!

今日,冬至.谚云:"十月一,冬至到,家家户户吃水饺.".在我美食大国,各地在这天有不同风俗,但多数地方有冬至吃饺子的习惯.冬至经过数千年发展,已形成独特的节令食文化.每到这天,不论贫富,饺子是必不可少的节日饭.这种习俗,是因纪念"医圣"张仲景冬至舍药留下的. 张仲景是南阳稂东人,著有<伤寒杂病论>,集医家之大成,被历代医者奉为经典.东汉时他曾任长沙太守,访病施药,大堂行医.后毅然辞官回乡,为乡邻治病.其返乡之时,正是冬季.他看到白河两岸乡亲面黄肌瘦,饥寒

项目中的有趣题目 -- 吃饺子问题

题目描述: 近日,项目中偶遇一个有趣的题目,感慨多多,备忘之.抽象出来,大致是: 桌上一共有100个饺子,其中有10个饺子包了硬币,问:连续吃到硬币的期望次数是多少次? 首先,定义一下这里的连续,如果我们将吃饺子的顺序抽象为一个100位的二进制数.并且吃到饺子表示为1,没吃到则为0,那么: 如果一次和第二次吃到,那么可表示为: 110.....,那么这里的连续吃到的次数为1. 如果数字为: ...1111.... ,那么这里连续的4个1表示3次连续,也就是说只要连续,就算1次. 期望次数,也就是

线段树 [SWUST OJ 764] 校门外的树 Plus Plus

校门外的树 Plus Plus(0764) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 214 Accepted: 15 Description 西南某科技大学的校门外长度为 L 的公路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们可以把马路看成一个数轴,马路的一端在数轴 1 的位置,另一端在 L 的位置:数轴上的每个整数点,即 1,2,……,L,都种有一棵树. 现在要将这排树的某一段涂成某种颜色,给定 N 组区间[ 

洛谷OJ P1433 吃奶酪 解题报告

洛谷OJ P1433 吃奶酪 解题报告 by MedalPluS 题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入描述 第一行一个数n  (n<=15)接下来每行2个实数,表示第i块奶酪的坐标.两点之间的距离公式=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 输出描述 一个数,表示要跑的最少距离,保留2位小数. 分析 这题很明显就是一个搜索题,枚举一下1_n的全排列,然后从0开始,按照排列一个一个算,时间

背包 [POJ 2184 SWUST OJ 145] Cow Exhibition

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9479   Accepted: 3653 Description "Fat and docile, big and dumb, they look so stupid, they aren't much  fun..."  - Cows with Guns by Dana Lyons The cows want to prove to