Submission #820119

#TimeUsernameProblemLanguageResultExecution timeMemory
820119MohamedAhmed04The Collection Game (BOI21_swaps)C++14
0 / 100
1 ms440 KiB
#include <bits/stdc++.h> #include "swaps.h" using namespace std ; const int MAX = 510 ; int n , q ; mt19937 rng(6000) ; int mark[MAX] ; int cntq = 0 ; vector<int>solve() { vector< vector<int> >v ; for(int i = 1 ; i <= n ; ++i) v.push_back({i}) ; while(v.size() > 1) { memset(mark , 0 , sizeof(mark)) ; //shuffle(v.begin() , v.end() , rng) ; vector< vector<int> >v2 ; int sz = v.size() ; vector< array<int , 4> >state ; for(int i = 0 ; i < sz-1 ; i += 2) { state.push_back({i , i+1 , 0 , 0}) ; v2.push_back({}) ; } if((sz & 1)) v2.push_back(v[sz-1]) ; bool ok = false ; while(!ok) { int cnt = 0 ; for(auto &a : state) { bool flag = false ; if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size()) { cnt++ , schedule(v[a[0]][a[2]] , v[a[0]][a[2]+1]) ; flag = true ; } if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size()) { cnt++ , schedule(v[a[1]][a[3]] , v[a[1]][a[3]+1]) ; flag = true ; } if(flag) continue ; if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size()) cnt++ , schedule(v[a[0]][a[2]] , v[a[1]][a[3]]) ; else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size()) cnt++ , schedule(v[a[0]][a[2]] , v[a[0]][a[2]+1]) ; else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size()) cnt++ , schedule(v[a[1]][a[3]] , v[a[1]][a[3]+1]) ; } vector<int>cur ; if(cnt) { cntq++ ; if(cntq > q) while(1) ; cur = visit() ; } int idx = 0 ; for(auto &a : state) { int idx2 = a[0] / 2 ; if(mark[a[0]] || mark[a[1]]) { if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size()) { if(!cur[idx]) swap(v[a[0]][a[2]] , v[a[0]][a[2]+1]) ; ++idx ; } if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size()) { if(!cur[idx]) swap(v[a[1]][a[3]] , v[a[1]][a[3]+1]) ; ++idx ; } mark[a[0]] = mark[a[1]] = 0 ; continue ; } if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size()) { if(cur[idx]) v2[idx2].push_back(v[a[0]][a[2]]) , a[2]++ ; else v2[idx2].push_back(v[a[1]][a[3]]) , a[3]++ ; if(a[2] == v[a[0]].size() && a[3] == (int)(v[a[1]].size()) - 1) v2[idx2].push_back(v[a[1]][a[3]]) , a[3]++ ; else if(a[3] == v[a[1]].size() && a[2] == (int)(v[a[0]].size()) - 1) v2[idx2].push_back(v[a[0]][a[2]]) , a[2]++ ; mark[a[0]] = mark[a[1]] = 1 ; ++idx ; } else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size()) { if(!cur[idx]) swap(v[a[0]][a[2]] , v[a[0]][a[2]+1]) ; v2[idx2].push_back(v[a[0]][a[2]]) ; a[2]++ ; if(a[2] == (int)(v[a[0]].size()) - 1) v2[idx2].push_back(v[a[0]][a[2]]) , a[2]++ ; ++idx ; } else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size()) { if(!cur[idx]) swap(v[a[1]][a[3]] , v[a[1]][a[3]+1]) ; v2[idx2].push_back(v[a[1]][a[3]]) ; a[3]++ ; if(a[3] == (int)(v[a[1]].size()) - 1) v2[idx2].push_back(v[a[1]][a[3]]) , a[3]++ ; ++idx ; } } ok = true ; for(auto &a : state) ok &= (a[2] == v[a[0]].size() && a[3] == v[a[1]].size()) ; } v = v2 ; for(int i = 0 ; i < v.size() ; ++i) { for(auto &x : v[i]) cout<<x<<" " ; cout<<"\n" ; } } return v[0] ; } void solve(int N, int V) { n = N , q = V ; answer(solve()) ; return ; }

Compilation message (stderr)

swaps.cpp: In function 'std::vector<int> solve()':
swaps.cpp:42:31: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:42:56: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |     if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:47:31: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size())
swaps.cpp:47:56: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size())
swaps.cpp:54:13: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:54:38: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |     if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:56:18: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size())
swaps.cpp:56:43: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size())
swaps.cpp:58:18: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:58:44: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:75:32: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |      if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:75:57: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |      if(mark[a[0]] && a[2] + 1 < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:81:32: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |      if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size())
swaps.cpp:81:57: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |      if(mark[a[1]] && a[3] + 1 < v[a[1]].size() && a[2] < v[a[0]].size())
swaps.cpp:90:13: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |     if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:90:38: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |     if(a[2] < v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:96:14: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |      if(a[2] == v[a[0]].size() && a[3] == (int)(v[a[1]].size()) - 1)
swaps.cpp:98:19: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |      else if(a[3] == v[a[1]].size() && a[2] == (int)(v[a[0]].size()) - 1)
swaps.cpp:103:18: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |     else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size())
swaps.cpp:103:43: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |     else if(a[2] < v[a[0]].size() && a[3] == v[a[1]].size())
swaps.cpp:113:18: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |     else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:113:44: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  113 |     else if(a[2] == v[a[0]].size() && a[3] < v[a[1]].size())
swaps.cpp:126:17: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |     ok &= (a[2] == v[a[0]].size() && a[3] == v[a[1]].size()) ;
swaps.cpp:126:43: warning: comparison of integer expressions of different signedness: 'std::array<int, 4>::value_type' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |     ok &= (a[2] == v[a[0]].size() && a[3] == v[a[1]].size()) ;
swaps.cpp:129:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  129 |   for(int i = 0 ; i < v.size() ; ++i)
      |                   ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...