题目描述
Farmer John购买了三头奶头:Bessie、Elsie和Mildred,最初每头奶牛每天产出7加仑的牛奶。由于已经知道随着时间的推移奶牛的产奶量可能会发生变化,所以FJ将会在接下来的100天定期测量奶牛们的产奶量并记录下来。
记录的形式如下:
35 Bessie -2
14 Mildred +3
...
第一个条目表示,在第35天,Bessie的产奶量比上次测量降低了2加仑
第二个条目表示,在第14天,Mildred的产奶量比上次测量增加了3加仑
Farmer John一天最多只能进行一次测量,由于FJ有点粗心大意,他的测量结果并不是按照时间顺序记下的。
为了保持奶牛们的积极性,FJ在牛棚的墙上会挂上目前产奶量最高的奶牛的照片(如果产奶量最高的奶牛有多头,那么他会挂出他们所有的照片)。
请计算出FJ需要更换墙上奶牛的照片的总天数。
输入格式
第一行,一个整数N,表示FJ的测量记录的条数
接下来N行,每行一个测量记录,测试记录的格式如题目描述:day name num,其中day表示测量的那一天,取值范围是1到100,name表示奶牛的名字(Bessie、Mildred或Elsie),num表示此次测量奶牛产奶量的变化情况,是一个非零的整数。
奶牛的产奶量范围是0到1000之间。
输出格式
一行,一个整数,整数的范围是0到100,表示FJ需要更换墙上奶牛的照片的总天数
输入输出样例
输入样例1:
4 7 Mildred +3 4 Elsie -1 9 Mildred -1 1 Bessie +2
输出样例1:
3
说明
【样例说明】:
最开始,每头奶牛的产量都是7加仑。
第1天,Bessie的产奶量增加到了9加仑,成为产量最高的奶牛,所以FJ需要更换墙上的照片。
第4天,Elsie的产奶量下降到了6加仑,所以Bessie的产奶量依旧是最高的
第7天,Mildred的产奶量增加到了10加仑,领先了Bessie,成为产奶量最高的奶牛,FJ需要更换墙上的照片
第9天,Mildred的产奶量下降到了9加仑,与Bessie的产奶量相等,并列领先,所以FJ需要更换墙上的照片,同时展示出Bessie和Mildred的照片。
【耗时限制】1000ms 【内存限制】128MB
这一波送福利了好吧(全网站都是要VIP的,不然就是太长太难,还是自己写的最简单了),废话0
代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int n,cnt,m[3]={7,7,7};
bool f[3]={1,1,1};
struct aj{
int day,id,dis;
}a[N];
bool cmp(aj a,aj b){
return a.day<b.day;
}
int main(){
cin>>n;
string name;
for(int i=1;i<=n;i++){
cin>>a[i].day>>name>>a[i].dis;
if(name=="Bessie") a[i].id=0;
else if(name=="Elsie") a[i].id=1;
else a[i].id=2;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
m[a[i].id]+=a[i].dis;
bool flag=0;
int maxn=max(m[0],max(m[1],m[2]));
for(int j=0;j<3;j++)
if(m[j]==maxn&&!f[j]) flag=f[j]=1;
else if(m[j]<maxn&&f[j]){flag=1;f[j]=0;}
if(flag) cnt++;
}
cout<<cnt;
return 0;
}