[ 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 */