开O2可AC,求优化
  • 板块灌水区
  • 楼主ManGo_Mouse
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/9/21 15:38
  • 上次更新2023/11/2 18:53:19
查看原帖
开O2可AC,求优化
742907
ManGo_Mouse楼主2023/9/21 15:38

rt,P1309

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 2 * 1e5 + 20;
struct player{
    int id,s,w;
};
int n,r,q;
vector<player> orz;
bool cmp(player a,player b){
    if(a.s == b.s)return a.id < b.id;
    return a.s > b.s;
}
int main(){
    cin>>n>>r>>q;
    for(int i = 0;i < 2 * n;i ++){
        int s;
        cin>>s;
        orz.push_back(player{i,s,0});
    }
    for(int i = 0;i < 2 * n;i ++)
        cin>>orz[i].w;
    sort(orz.begin(),orz.end(),cmp);
    for(int i = 1;i <= r;i ++){
        vector<player> now;
        queue<player> win,lose;
        // 归(打比赛)
        for(int j = 0;j < 2 * n;j += 2)
            if(orz[j].w > orz[j + 1].w){
                orz[j].s ++;
                win.push(orz[j]);
                lose.push(orz[j + 1]);
            }
            else {
                orz[j + 1].s ++;
                win.push(orz[j + 1]);
                lose.push(orz[j]);
            }
        // 并
        while(win.size() && lose.size())
            if(win.front().s == lose.front().s){
                if(win.front().id < lose.front().id){
                    now.push_back(win.front());
                    win.pop();
                }
                else {
                    now.push_back(lose.front());
                    lose.pop();
                }
            }
            else if(win.front().s > lose.front().s){
                now.push_back(win.front());
                win.pop();
            }
            else {
                now.push_back(lose.front());
                lose.pop();
            }
        // sort(orz.begin(),orz.end(),cmp);
        orz = now;
        // cout<<i<<endl<<"win:";
        // for(int j = 0;j < win.size();j ++)
        //     cout<<win[j].s<<" ";
        // cout<<endl<<"lose:";
        // for(int j = 0;j < lose.size();j ++)
        //     cout<<lose[j].s<<" ";
        // cout<<endl<<"now:";
        // for(int j = 0;j < now.size();j ++)
        //     cout<<now[j].s<<" ";
        // cout<<endl<<"orz:";
        // for(int j = 0;j < orz.size();j ++)
        //     cout<<orz[j].s<<" ";
        // cout<<endl<<endl;
    }
    cout<<orz[q - 1].id + 1;
    return 0;
}
2023/9/21 15:38
加载中...