1 条题解

  • 0
    @ 2021-11-06 18:48:41

    简单模拟即可,实现方式有很多。
    时间复杂度是\(O(n\log n)\)
    Code:

    #include<bits/stdc++.h>
    using namespace std;
    using ll = long long;
    using pii = pair<int,int>;
    int main()
    {
        vector<pii> v;
        int n;cin>>n;
        for(int i=1, x;i<=n;i++) cin>>x, v.push_back(make_pair(i, x));
        //vector里存放选手的编号和力量
        
        auto operate = [](vector<pii>& v){
            vector<pii> res;
            for(int i=0;i<v.size()-1;i+=2)
                if(v[i].second>=v[i+1].second) res.push_back(v[i]);
                else res.push_back(v[i+1]); //保留力量较大的选手
            if(v.size()%2) res.push_back(v.back());
            return res;
        };
        
        while(v.size()>2) v = operate(v); //一直进行比赛,直到只剩两人
        cout<<v[0].first<<" "<<v[1].first<<'\n';
    }
    
    
  • 1

信息

ID
1297
难度
5
分类
(无)
标签
递交数
163
已通过
51
通过率
31%
被复制
1
上传者