Submission #1242037

#TimeUsernameProblemLanguageResultExecution timeMemory
1242037salmonMemory 2 (JOI16_memory2)C++20
100 / 100
1 ms328 KiB
#include "Memory2_lib.h" #include <bits/stdc++.h> using namespace std; void Solve(int T, int N){ if(T == 500) return; int name[N * 2 + 5]; for(int i = 0; i < N * 2; i++) name[i] = -1; vector<int> proc = {0,1,2,3}; if(N == 1){ proc.pop_back(); proc.pop_back(); } int cont = 4; bool pastd = false; while(proc.size() == 4){ if(pastd){ set<int> de[4]; for(int j = 0; j < 3; j++){ int num = Flip(proc[j],proc[3]); de[j].insert(num); de[3].insert(num); } if(de[3].size() == 1){ name[proc[3]] = *de[3].begin(); proc[3] = -1; } else{ if(*de[1].begin() != *de[0].begin()){ swap(de[1],de[2]); swap(proc[1],proc[2]); } if(*de[1].begin() != *de[0].begin()){ swap(de[0],de[2]); swap(proc[0],proc[2]); } name[proc[0]] = *de[0].begin(); proc[0] = -1; name[proc[1]] = *de[1].begin(); proc[1] = -1; pastd = false; } } else{ set<int> de[4]; for(int j = 0; j < 4; j++){ for(int k = j + 1; k < 4; k++){ int num = Flip(proc[j],proc[k]); de[j].insert(num); de[k].insert(num); } } vector<pair<int,int>> v(0); for(int i = 0; i < 4; i++) v.push_back({de[i].size(), i}); sort(v.begin(),v.end()); /*for(pair<int,int> ii : v) printf("%d ",ii.first); printf("\n");*/ if(v[3].first == 3){ name[proc[v[0].second]] = *de[v[0].second].begin(); proc[v[0].second] = -1; de[v[1].second].erase(*de[v[0].second].begin()); name[proc[v[1].second]] = *de[v[1].second].begin(); proc[v[1].second] = -1; } else if(v[1].first == 1){ name[proc[v[0].second]] = *de[v[0].second].begin(); proc[v[0].second] = -1; name[proc[v[1].second]] = *de[v[1].second].begin(); proc[v[1].second] = -1; } else{ name[proc[v[0].second]] = *de[v[0].second].begin(); proc[v[0].second] = -1; pastd = true; } } vector<int> temp = proc; proc.clear(); for(int i : temp) if(i != -1) proc.push_back(i); for(int i = 0; i < 2; i++){ if(proc.size() != 4 && cont != N * 2){ proc.push_back(cont); cont++; } } //for(int i = 0; i < N * 2; i++) printf("%d ",name[i]); //printf("\n"); } vector<int> visited[N]; for(int i = 0; i < N; i++) visited[i].clear(); for(int i = 0; i < N * 2; i++){ if(name[i] != -1) visited[name[i]].push_back(i); } if(proc.size() != 2){ set<int> de[3]; for(int j = 0; j < 3; j++){ for(int k = j + 1; k < 3; k++){ int num = Flip(proc[j],proc[k]); de[j].insert(num); de[k].insert(num); } } vector<pair<int,int>> v(0); for(int i = 0; i < 3; i++) v.push_back({de[i].size(), i}); sort(v.begin(),v.end()); name[proc[v[0].second]] = *de[v[0].second].begin(); visited[name[proc[v[0].second]]].push_back(proc[v[0].second]); } for(int i = 0; i < N; i++){ if(visited[i].empty()){ for(int j = 0; j < N * 2; j++){ if(name[j] == -1) visited[i].push_back(j); } } } for(int i = 0; i < N; i++){ Answer(visited[i][0],visited[i][1],i); } return; } /* 1 1 1000 0 0 0 1 4 1000 2 3 0 1 0 0 1 2 3 2 1 3 1 4 1000 0 3 1 2 0 1 2 2 3 3 0 1 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...