糖糖别胡说,我真的不是签到题目

糖糖别胡说,我真的不是签到题目

https://ac.nowcoder.com/acm/problem/14583

题意:n只糖糖分为二组做游戏,排成一排,第i只糖糖有能力值bi,从第i秒的时候,第i只糖糖就可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的糖糖。糖糖的爸爸,娇姐,会发功m次,第i次发功的时间为ci,则在第ci秒结束后,b1,b2,.....,bci都会增加1,现在,娇姐想知道在第n秒后,会有多少只糖糖存活下来。

思路:逆向模拟

代码:

#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define inf 1000000007

int a[100005], b[100005], f[1000005];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof(f));
        int n, m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d %d",&a[i],&b[i]);
        }
        for(int i=0;i<m;i++)
        {
            int c;
            scanf("%d",&c);
            f[c]++;
        }
        int ma=-1, mb=-1;
        int k=0, jia=0;
        for(int i=n;i>=1;i--)
        {
            jia+=f[i];
            b[i]=b[i]+jia;
            if(a[i]==0)
            {
                if(b[i]<mb)
                {
                    k++;
                }
                if(b[i]>ma)
                {
                    ma=b[i];
                }
            }
            else
            {
                if(b[i]<ma)
                {
                    k++;
                }
                if(b[i]>mb)
                {
                    mb=b[i];
                }
            }
        }
        printf("%d\n",n-k);
    }
    return 0;
}
全部评论

相关推荐

重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
勤劳的香菇求被捞求offer:满帮笔试都不给我发 似乎被卡本了
投递满帮集团等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务