本题大致思路:
用 ans 变量, 储存答案 用一个 a[7] 变量, 分别储存在某一行放最新一个土豆的时间. 用 b[2010] 变量, 放每个僵尸的数据
输入僵尸数据后, 按照出现时的时间进行升序排列, 来模拟出现的时间先后顺序
再分别枚举每个僵尸, 看它出现的时间, 是否在: 此行上个土豆的时间~ 此行上个土豆的时间 + 60 之间
若是, 则不需要新的土豆, ans 不变
若不是, 则需要一个新的土豆, 来 neng 死他, ans 变量 ++; 同时, a 数组中, 相应行中新土豆出现时间置为 t-1(可以捉摸琢磨为什么 - 1 QVQ)
然后枚举下一个僵尸
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- struct zombie
- {
- int p,t;
- }b[2010];// 放每个僵尸的数据
- int a[7];
- int ans=0;
- int n;
- bool cmp(zombie x,zombie y)
- {
- return x.t<y.t;
- }
- int main()
- {
- scanf("%d",&n);
- memset(a,-60,sizeof(a));// 先将 a 置为 - 60, 使每一个 t 都大于 a[i]+60, 以便于判断的开始
- for(int i=1;i<=n;i++)
- scanf("%d%d",&b[i].p,&b[i].t);
- sort(b+1,b+n+1,cmp);// 按 t 升序排列
- for(int i=1;i<=n;i++)
- if(a[b[i].p]<b[i].t && a[b[i].p]+60>=b[i].t) bool no_use_bool_just_take_it_a_joke; // 为了使用 else 而设的 if
- else
- {
- ans++;// 增加答案
- a[b[i].p]=b[i].t-1;// 赋新的 t 值
- }
- printf("%d",ans);// 完美潇洒の结束
- }
来源: http://www.bubuko.com/infodetail-3182424.html