题解[CF332C]学生の復讐

フェイス質問

解決

スパイシー鶏の顔は私の青春のタイトルを台無しに

問題の顔は、翻訳と書いたので\(N-kの残りの部分は完了しません\)

だから私は、残りの考え\(\ NK)ヶ月が値を満たしていないカウントされます。

(しかし、実際にはそれだけです\(\ PK)もっと...)

まず、社長の規則に従って、我々は最初の帝国できる\は(PK \)絶対にタスクを選択できません、

\(B \)下降し、次いで、\(A \)上昇は、最後尾のラインに沿います。

(それを理解することは簡単なはずです...)

そして、プレスの残りの部分に置く\(\) 降順

その後、\(のb \)取る前に、降順に\(K \)番目の最大の白い毛の状況です。

ここでは\(のb \)の残りのため降順(\ PK)\不満だけでなく、最大の、

だから、降順より多くの機会があるかどうか。

その後、残りの考慮(PK \)\を A、

王ジェームズは必ずしも不満の最大のケースではありません前にあるので、

だから我々は最初の注文を押す必要があり、

すでに服用する前にかかりました\(k個\)タスクの顔に最後のヶ月後を\(PK \)リストの番目。

これは少し複雑に聞こえるかもしれ...

我々は残りのことを確実にしたいので、\は(PK \) 1は、目の前に干渉することはできません\(k個\) すなわち議長ルールで優先度の高い)番目。

そして、自分自身\(YY \)の下のリストにする必要があります。

注意すべきもう一つのポイントは、ということです

2つのタスクが可能があるので\(、B \) 等しいです

(WAが唾するので...)だから、結果は二回と同じ種類ではないかもしれません

だから、うまく3番目のキーとして番号を注文するとき。

コード:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;

inline int read(){
    int sum=0,f=1;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
    return f*sum;
}

const int N=200005;
struct node{int x,y,tag,id,pos;}a[N],b[N];
int n,K,P,sum=0x3f3f3f3f,ret=0;

inline bool cmp(node a,node b){
    return a.y!=b.y? a.y<b.y:a.x>b.x;
}

inline bool cmp1(node a,node b){
//  if(a.tag!=b.tag) return a.tag<b.tag;
    if(a.x!=b.x) return a.x>b.x;
    return a.y>b.y;
}

inline bool cmp2(node a,node b){return a.y!=b.y? a.y>b.y:a.x<b.x;}

signed main(){
    n=read();P=read();K=read();
    for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
    for(int i=1;i<=n;i++) a[i].id=i;
    sort(a+1,a+n+1,cmp2);
    memcpy(b,a,sizeof(b));
    for(int i=1;i<=n;i++) a[i].pos=i;
    int ss=P-K;
    sort(a+1,a+n-ss+1,cmp1);
    for(int i=1;i<=K;i++) printf("%d ",a[i].id);
    for(int i=1;i<=K;i++) ret=max(ret,a[i].pos);
//  sort(a+ret+1,a+n+1,cmp2);
    for(int i=1;i<=ss;i++){
        printf("%d ",b[i+ret].id);
    }
    
//  for(int i=1;i<=n;i++) if(a[i].tag) printf("%d ",a[i].id);
    puts("");
    return 0;
}

おすすめ

転載: www.cnblogs.com/zsq259/p/11519896.html