CodeForces - 1148D(思维+规律)

题目链接:https://vjudge.net/contest/350168#problem/B

思路:

只要考虑最值+排序就好了。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
int a[N],b[N];
#define P pair <int,int>
vector <pair <int,int> > vc[2];
int main(void)
{
    int n,x,y,t1 = 0,t2 = 0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i],&b[i]);
        if(a[i] > b[i]) vc[0].push_back(P(a[i],i)),t1++;
        else vc[1].push_back(P(b[i],i)),t2++;
    }
    printf("%d\n",max(t1,t2));
    if(t1 >= t2)
    {
        sort(vc[0].begin(),vc[0].end());
        for(int i=0;i<t1;i++){
            if(i!=0) printf(" ");
            printf("%d",vc[0][i].second);
        }
    }
    else{
        sort(vc[1].begin(),vc[1].end());
        for(int i=t2-1;i>=0;i--){
            if(i!=t2-1) printf(" ");
            printf("%d",vc[1][i].second);
        }
    }
    return 0;
}
发布了438 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41829060/article/details/103806891