Submission #1360489

#TimeUsernameProblemLanguageResultExecution timeMemory
1360489sallyA String Problem (EGOI25_stringproblem)C++20
0 / 100
1 ms2628 KiB
#include<iostream>
#include<vector>
using namespace std;
#define f first
#define s second
typedef pair<int,int> pii;
struct ANS{
    int str, from, to;
};
const int mx = 100000+5;
int N, M;
vector<pii> node(2*mx); // node[i].first = opposite, node[i].second = line_index
vector<ANS> ans;
vector<pii> line(mx);
bool vis[2*mx];
int cnt[2*mx] = {0};
int main() {
    cin>>N;
    M = 2*N;
    int base = 1, base_cnt = 0;
    for(int i=0; i<N; i++) {
        int a, b;
        cin>>a>>b;
        node[a] = {b, i};
        node[b] = {a, i};
        line[i] = {a, b};
        int k = (a+b)%M;
        if((k&1)==0) continue;
        cnt[k]++;
        if(cnt[k]>base_cnt) {
            base_cnt = cnt[k];
            base = k;
        }
    }
    int remain = N;
    for(int i = 0; i<N; i++) {
        if(line[i].f + line[i].s == base) {
            vis[line[i].f] = vis[line[i].s] = true;
            remain--;
            continue;
        }
    }
    //cout<<"base = "<<base<<"start = "<<start<<'\n';
    for(int i=0; i<M; i++) {
        if(remain<=0) break;
        if(vis[i]) continue;
        int start = i;
        int t = (base - start + M) % M;
        int opp = node[i].f;
        ans.push_back({node[i].s, opp, t});
        vis[start] = vis[t] = true;
        start = opp;
        remain--;
        while(remain>0) {
            int target = (base - start + M) % M;
            int opp = node[target].f;
            int line = node[target].s;
            ans.push_back({line, opp, start});
            vis[target] = vis[start] = true;
            start = opp;
            remain--;
        }   
    }

    cout<<ans.size()<<'\n';
    for(auto [line, from, to]:ans) cout<<line<<" "<<from<<' '<<to<<'\n';
}
#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...