其他分享
首页 > 其他分享> > 1024 [SCOI2010]游戏

1024 [SCOI2010]游戏

作者:互联网


链接:https://ac.nowcoder.com/acm/contest/23156/1024
来源:牛客网

题目描述

lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装备最多只能使用一次。 游戏进行到最后,lxhgww遇到了终极boss,这个终极boss很奇怪,攻击他的装备所使用的属性值必须从1开始连续递增地攻击,才能对boss产生伤害。也就是说一开始的时候,lxhgww只能使用某个属性值为1的装备攻击boss,然后只能使用某个属性值为2的装备攻击boss,然后只能使用某个属性值为3的装备攻击boss……以此类推。现在lxhgww想知道他最多能连续攻击boss多少次?

输入描述:

输入的第一行是一个整数N,表示lxhgww拥有N种装备
接下来N行,是对这N种装备的描述,每行2个数字,表示第i种装备的2个属性值

输出描述:

输出一行,包括1个数字,表示lxhgww最多能连续攻击的次数。
示例1

输入

复制
3
1 2
3 2
4 5

输出

复制
2

备注:

对于30%30\%30% 的数据,保证N≤1000N \leq 1000N≤1000
对于100%100\%100% 的数据,保证N≤1000000N \leq 1000000N≤1000000

贪心:

是我搞错了还是大佬搞错了。这题直接贪心不就行了,为啥要二分图匹配,。。。

给每个节点按照比较小的关键字排序,然后比较大的关键字排序不排序都行

然后从前往后查找每个1,2,3,4,5.。。和每个节点一一比较

如果每个节点的a和b都不满足条件,把这个b保存下来,如果下次遇到了这个b值直接使用它

就a了啊。

 


//-------------------------代码----------------------------

//#define int LL
const int N = 1e6+10;
int n,m;
struct Q {
    int a,b;
    bool operator<(const Q & t )const {
        if(a == t.a) {
            return b < t.b;
        }  else return a < t.a;
    }
};
Q q[N];
int vis[N];
void solve()
{
     cin>>n;
//     V<V<int>>mp(n+1,V<int>(m+1));
     fo(i,1,n) {
         cin>>q[i].a>>q[i].b;
         if(q[i].a > q[i].b)swap(q[i].a,q[i].b);
     }
    sort(q+1,q+1+n);
    int sum = 0;
    int l = 0;
    for(int i = 1;i<=n;i++) {
        while(vis[sum + 1]) sum ++ ,l ++ ;
        if(q[i].a == 1+sum) {
            sum ++ ; l ++ ;
        } else if(q[i].b == 1 + sum) {
            sum ++ ; l ++ ;
        } else vis[q[i].b] = true;
    }
    cout<<l<<endl;
}

signed main(){
    clapping();TLE;
    
//    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

标签:1024,游戏,int,sum,boss,++,lxhgww,装备,SCOI2010
来源: https://www.cnblogs.com/er007/p/16438964.html