Codeforcs(Yet Another Monster Killing Problem)

贪心就好
一开始理解错题意了,以为可以随便找怪兽打,题目要求是挨着一个个的打
枚举每个耐力值,求出该耐力值下英雄最大的攻击力

代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005],u[200005];
int main()
{
    ll n,m,t;
    cin>>t;
    while(t--)
    {
        ll x,y;
        cin>>n;
        ll gmx=-1;
        for(int i=0;i<n;i++)
        {cin>>a[i];gmx=max(gmx,a[i]);u[i]=0;}
        u[n]=0;
        cin>>m;
        for(int i=0;i<m;i++)
        {
            cin>>x>>y;
            u[y]=max(u[y],x);
        }
        for(int i=n-1;i>=1;i--)
        {u[i]=max(u[i],u[i+1]);}
        if(u[1]<gmx)
        {cout<<"-1"<<endl;
        continue;}
        ll time=0,cnt=0,df=-1,i=0;
        while(i<n)
        {
            cnt++;
            df=max(df,a[i]);
            if(u[cnt]>=df)
            {i++;}
            else
            {
                df=-1;
                cnt=0;
                time++;
            }
        }
        if(cnt!=0)
        {time++;}
        cout<<time<<endl;
    }
    return 0;
}
发布了36 篇原创文章 · 获赞 4 · 访问量 1385

猜你喜欢

转载自blog.csdn.net/qq_43781431/article/details/104736568