码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ: 5596

时间:2015-12-12 21:42:00      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏。他们会排列成一排,第ii只GT会随机得到一个能力值bib?i??。在第ii秒的时候,第ii只GT可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的GT。
为了使游戏更加有趣,GT的首领GTW会发功mm次,第ii次发功的时间为cic?i??,则在第cic?i??秒结束后,b1b2...bcib?1??,b?2??,...,b?c?i????都会增加1。
现在,GTW想知道在第nn秒之后,会有几只GT存活下来。
输入描述
第一行只有一个整数TT5T(T5),表示测试数据组数。
第二行有两个整数nmn,m。表示GT的个数和GTW发功的次数。(1n500001m500001n50000,1m50000)
第三到n2n+2行,每行有两个整数aibia?i??,b?i??,表示第ii只GT在哪个组和他的能力值 0ai11bi106(0a[i]1,1b[i]10?6??)
第n3n+3行到第nm2n+m+2行,每行有一个整数cic?i??,表示GTW第ii次发功的时间。1cin1c[i]n
输出描述
总共TT行,第ii行表示第ii组数据中,GT存活的个数。
输入样例
1
4 3
0 3
1 2
0 3
1 1
1
3
4
输出样例
3

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

 

struct node{

 

    int a;//分组

    int b;//能力值

 

}gt[50010];

 

int main()

{

    int T,i,j,count;

    int n,m;

    int c[50010];

    cin>>T;

    

    while(T--)

    {

        cin>>n>>m;

        count=0;

        for(i=1;i<=n;i++)

        {

            cin>>gt[i].a>>gt[i].b;

        }//输入组数,能力值

        

        for(i=0;i<m;i++)

        {

            cin>>c[i];

        }//输入发功时间

        

        sort(c,c+m);

        for(i=0;i<m;i++)

        {

            //第i次发功时间

            for(j=1;j<=c[i];j++)

                gt[j].b+=1;

        }//先不管干没干掉,将所有发功引起的能力值加上,能力值加上后结果不变,将所有能力值加上后在判断死完人数。

        

        for(i=1;i<=n;i++)

        {

            for(j=1;j<i;j++)

            {

                if((gt[j].a!=gt[i].a)&&(gt[j].b<gt[i].b))

                    gt[j].b=0;//为0代表干掉

            }

        

        }//干掉前面的。

        

         for(i=1;i<=n;i++)

         {

             if(gt[i].b!=0)

                 count++;

         }

    

        cout<<count<<endl;

    

    

    

    }

    

    return 0;

}

HDOJ: 5596

标签:

原文地址:http://www.cnblogs.com/xiangrutt/p/5041750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!