Submission #1361497

#TimeUsernameProblemLanguageResultExecution timeMemory
1361497yyc000123A String Problem (EGOI25_stringproblem)C++20
23 / 100
2100 ms213736 KiB
#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int N = 1e5+5 ;
int n , brr[4*N] , cnt , flag[N] ;
vector<pair<int,int>> vp ;
pair<int,int> arr[2*N] ;

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n ;
    vp.resize(n) ;
    for(int i=0 ; i<n ; i++){
        cin >> vp[i].F >> vp[i].S ;
        arr[vp[i].F]={vp[i].S,i} ; arr[vp[i].S]={vp[i].F,i} ;
        if(abs(vp[i].F-vp[i].S)&1) brr[vp[i].F+vp[i].S]++ ;
    }
    int sum = max_element(brr+1,brr+4*n)-brr ; sum%=(2*n) ;
    cnt = n ;
    for(int i=0 ; i<n ; i++){
        if((vp[i].F+vp[i].S)%(2*n)==sum) cnt-- , flag[vp[i].F] = flag[vp[i].S] = 1 ;
    }
    cout << cnt << '\n' ;
    int pos = 0 ;
    while(pos<2*n && flag[pos]) pos++ ;
    auto f = [&] (int k) -> int {
        k%=(2*n) ; k+=(2*n) ; k%=(2*n) ; return k ;
    };
    while(cnt){
        int cur = pos ;
        do{
            cout << arr[cur].S << ' ' << arr[cur].F << ' ' << f(sum-cur) << '\n' ;
            flag[cur] = flag[f(sum-cur)] = 1 ; cnt-- ;
            cur = arr[f(sum-cur)].F ;
        }while(!flag[cur]) ;
        while(pos<2*n && flag[pos]) pos++ ;
    }
    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...