题解 P1413 【坚果保龄球】

· · 题解

一道很简单的贪心模拟题~

想必大家已经想出贪心思路了:只有当一个zombie抵达第一列,我们才会不得不放坚果。很显然,这肯定是最佳方案。

具体实现思路是对每一行单独处理,对于每一只抵达第一行的zombie,用坚果杀死它,顺便杀死所有当前也在这行的zombie。

到底怎么写呢?请看代码。

#include<bits/stdc++.h>
using namespace std;

int t[7][2001];
int n,ans;

int main()
{
    cin>>n;
    int j[7];for(int i=1;i<=6;i++) j[i]=0;  //喜闻乐见的读入环节~ 

    for(int i=1;i<=n;i++)  //这里用time[i][j]表示第i行的第j只zombie的抵达时间 
    {
        int t1,t2;cin>>t1>>t2;
        t[t1][++j[t1]]=t2+60;
    }

    for(int i=1;i<=6;i++)
        sort(t[i]+1,t[i]+1+j[i]);
    /*
    for(int i=1;i<=5;i++)
    {
        for(int k=1;k<=j[i];k++)
            cout<<t[i][k]<<' ';
        cout<<endl;
    }
    */  //调试时用的 
    for(int i=1;i<=6;i++) //对每一行分别处理
    {
        int x=1; //从这一行的第一只zombie开始碾压 
        while(x<=j[i])
        {
            ans++;
            int x1=x; 
            while(t[i][x1]<t[i][x]+60) x1++;
            //碾压所有同时在这一行的zombies!!注意<不能打成<=,否则样例都过不了 
            x=x1;
        }
     }

    cout<<ans; 
 } 

总之,其实这题真的不难,不过在一些细节方面上要注意。

比如:

感谢浏览!如果你认为这篇题解的讲解还不错的话,请您为这篇题解点赞哦~