P1413 坚果保龄球 题解
小邱
2021-02-11 15:11:04
[题目传送门](https://www.luogu.com.cn/problem/P1413)
由于一个坚果只能在一行上活动,不可以管其他行的事情,所以我们可以一行一行的处理
而在同一行的zombie只要有一个和begin的时间差60及以上,就要ans++
## 上代码!
```cpp
#include<bits/stdc++.h>
using namespace std;
int s1,s2,s3,s4,s5,s6,a[2000],b[2000],c[2000],d[2000],e[2000],f[2000];//s分别表示每行的zombie个数,abcdefg数组为每行的zombie时间
long long ans;
bool cmd(int a,int b)
{
if(a<b)
return 1;
return 0;
}
int main()
{
int n,begin,i;//begin为60时间内的开始时间
scanf("%d",&n);//输入的n个数
for(i=0;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==1)
{
a[s1]=y;
s1++;
}
else if(x==2)
{
b[s2]=y;
s2++;
}
else if(x==3)
{
c[s3]=y;
s3++;
}
else if(x==4)
{
d[s4]=y;
s4++;
}
else if(x==5)
{
e[s5]=y;
s5++;
}
else if(x==6)
{
f[s6]=y;
s6++;
}
}
sort(a,a+s1,cmd);//每行从小到大排,方便后面运算
sort(b,b+s2,cmd);
sort(c,c+s3,cmd);
sort(d,d+s4,cmd);
sort(e,e+s5,cmd);
sort(f,f+s6,cmd);
begin=a[0];//让begin记录一下第一个60的开始点
if(s1)
ans++;//就算都没有超过59也需要用一个球,可以理解成第一波60时间内也需要一个球,所以要提前+1
for(i=1;i<s1;i++)
{
if(a[i]-begin>59)//不可以是60,否则过不了
{
ans++;//需要新增一个球
begin=a[i];//记录下一个60的开始点
}
}
//余下同理
begin=b[0];
if(s2)
ans++;
for(i=1;i<s2;i++)
{
if(b[i]-begin>59)
{
ans++;
begin=b[i];
}
}
begin=c[0];
if(s3)
ans++;
for(i=1;i<s3;i++)
{
if(c[i]-begin>59)
{
ans++;
begin=c[i];
}
}
begin=d[0];
if(s4)
ans++;
for(i=1;i<s4;i++)
{
if(d[i]-begin>59)
{
ans++;
begin=d[i];
}
}
begin=e[0];
if(s5)
ans++;
for(i=1;i<s5;i++)
{
if(e[i]-begin>59)
{
ans++;
begin=e[i];
}
}
begin=f[0];
if(s6)
ans++;
for(i=1;i<s6;i++)
{
if(f[i]-begin>59)
{
ans++;
begin=f[i];
}
}
printf("%lld",ans);
return 0;
}
```
最后,你猜我会些什么?
[AC记录](https://www.luogu.com.cn/record/45147535)!