Submission #1359619

#TimeUsernameProblemLanguageResultExecution timeMemory
1359619adriines06A String Problem (EGOI25_stringproblem)C++20
100 / 100
161 ms24664 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
    int n; cin>>n;
    vector<pair<int,int>>v(n);
    map<int,int>mp,pos;
    vector<int>conec(2*n);
    for(int i=0;i<n;i++){
        int a,b; cin>>a>>b;
        v[i]={a,b};
        conec[a]=b;
        conec[b]=a;
        int x=(a+b)%(2*n);
        if(x%2!=0) mp[x]++;
        pos[a]=i;
        pos[b]=i;
    }
    int maxi=0,s;
    for(auto x: mp){
        maxi=max(maxi,x.second);
        if(maxi==x.second) s=x.first;
    }
    cout<<n-maxi<<"\n";
    int movs=n-maxi;
    if(movs==0) return;
    if(maxi==0) s=2*n-1;
    unordered_set<int>falta;
    vector<bool>c(2*n,false);
    for(int i=0;i<n;i++){
        int a=v[i].first, b=v[i].second;
        int x=(a+b)%(2*n);
        if(x!=s){
            falta.insert(a);
            falta.insert(b);
        }
        else{
            c[a]=1;
            c[b]=1;
        }
    }
    //w[i]= pin "chueco"
    int act=*falta.begin();
    while(movs--){
        if(c[act]){
            act=*falta.begin();
        }
        int pos1=(s-act+2*n)%(2*n);
        int desde=conec[pos1];
        cout<<pos[pos1]<<" "<<desde<<" "<<act<<"\n";
        falta.erase(act);
        falta.erase(pos1);
        c[act]=1;
        c[pos1]=1;
        act=desde;
    }

}
int main(){
    ios::sync_with_stdio(0);
    cout.tie(0);
    cin.tie(0);
    solve();
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...