[ An Ac a Day ^_^ ] CodeForces 586C Gennady the Dentist 模拟

题意:

n个小朋友去拔牙 每个小朋友在拔牙的时候会哭 哭声是vi分贝

距离门口vi远的小朋友听到了哭声会害怕 他们的勇气值p会减少d

如果勇气值p小于等于零 他们就会在门外哭并立即离开拔牙队列(回家找妈妈……)

这个哭声门外所有的小朋友都能听到 所以这个哭声会同时减少所有小朋友的勇气值

问最后有多少小朋友可以拔完牙

 

思路:

就是模拟一下这个过程

好像后面的小朋友哭了对前面的小朋友没有影响

WA了一次是因为结构体里没用long long……

 

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<math.h>
 5 #include<string.h>
 6 #include<string>
 7 #include<map>
 8 #include<set>
 9 #include<vector>
10 #include<queue>
11 #define M(a,b) memset(a,b,sizeof(a))
12 using namespace std;
13 typedef long long ll;
14 struct child{
15     ll vi,d,p;
16 }child[4005];
17 int cnt=0,ans[4005];
18 int main(){
19     int n;
20     scanf("%d",&n);
21     for(int i=1;i<=n;i++)
22         scanf("%I64d%I64d%I64d",&child[i].vi,&child[i].d,&child[i].p);
23     for(int i=1;i<=n;i++){
24         if(child[i].p<0) continue;
25         ans[cnt++]=i;
26         ll v=child[i].vi,cry=0;
27         for(int j=i+1;j<=n;j++){
28             if(child[j].p<0) continue;
29             child[j].p-=v+cry;
30             v--;
31             if(v<0) v=0;
32             if(child[j].p<0) cry+=child[j].d;
33         }
34     }
35     printf("%d\n",cnt);
36     for(int i=0;i<cnt;i++)
37         printf("%d%c",ans[i],i==cnt-1?'\n':' ');
38     return 0;
39 }
40 /*
41 
42 5
43 4 2 2
44 4 1 2
45 5 2 4
46 3 3 5
47 5 1 2
48 
49 5
50 4 5 1
51 5 3 9
52 4 1 2
53 2 1 8
54 4 1 9
55 
56 */

 

posted @ 2016-08-12 19:33  良将ℓ  阅读(154)  评论(0编辑  收藏  举报