Submission #940732

# Submission time Handle Problem Language Result Execution time Memory
940732 2024-03-07T14:29:08 Z Sundavar Monster Game (JOI21_monster) C++17
0 / 100
72 ms 4944 KB
#include "monster.h"
#include <bits/stdc++.h>
using namespace std;
mt19937 rng(11);

vector<vector<int> > m(1000, vector<int>(1000, -1));
bool ask(int a, int b){
  if(m[a][b] == -1){
    m[a][b] = Query(a,b);
    m[b][a] = 1 - m[a][b];
  }
  return m[a][b];
}

vector<int> solve2(vector<int> v){
  if(v.size() == 1) return v;
  vector<int> left, right;
  for(int i = 0; i < v.size(); i++)
    if(i < v.size()/2) left.push_back(v[i]);
    else right.push_back(v[i]);
  left = solve2(left), right = solve2(right);
  vector<int> res;
  /*for(int& a : left) cout << a << " ";
  cout << "\n";
  for(int& a : right) cout << a << " ";
  cout << "\n";
  cout << "\n";*/
  for(int l = 0, r = 0; l < left.size() || r < right.size();){
    if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]);
    else res.push_back(right[r++]);
  }
  return res;
}

void correct_long(vector<int>& v, int i){
  int l = 1;
  while(i+l+1 < v.size() && ask(v[i], v[i+l+1])) l++;
  for(int j = 0; j < (l+1)/2; j++) swap(v[i], v[i+l-j]);
}

void correct(vector<int>& v, int i){
  int l = 1;
  while(i+l < v.size() && !ask(v[i-1], v[i+l])) l++;
  for(int j = 0; j < (l+1)/2; j++) swap(v[i+j], v[i+l-j]);
}

std::vector<int> Solve(int N) {
  vector<int> v;
  for(int i = 0; i < N ; i++) v.push_back(i);
  shuffle(v.begin(), v.end(), rng);
  v = solve2(v);
  /*for(int& a : v) cout<<a<<" ";
  cout << "\n";*/
  
  int cnt = 0, j = 0;
  for(int i = 1; i < N; i++) cnt += ask(v[0], v[i]);
  if(cnt != 1) correct_long(v, 0);
  if(cnt == 1 && !ask(v[0], v[1])){
    int cnt2 = 0;
    for(int i = 0; i < N; i++) if(i != 1) cnt2 += ask(v[1], v[i]);
    if(cnt2 == 1) swap(v[0], v[1]);
  }
  for(int i = 0; i < N-1; i++)
    if(!ask(v[i], v[i+1])){
      correct(v, i+1);
    }
  /*for(int& a : v) cout<<a<<" ";
  cout << "\n";*/
  vector<int> T(N);
  for(int i = 0; i < N; i++) T[v[i]] = i;
  return T;
}

Compilation message

monster.cpp: In function 'std::vector<int> solve2(std::vector<int>)':
monster.cpp:18:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   for(int i = 0; i < v.size(); i++)
      |                  ~~^~~~~~~~~~
monster.cpp:19:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     if(i < v.size()/2) left.push_back(v[i]);
      |        ~~^~~~~~~~~~~~
monster.cpp:28:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(int l = 0, r = 0; l < left.size() || r < right.size();){
      |                         ~~^~~~~~~~~~~~~
monster.cpp:28:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(int l = 0, r = 0; l < left.size() || r < right.size();){
      |                                            ~~^~~~~~~~~~~~~~
monster.cpp:29:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]);
      |        ~~^~~~~~~~~~~~~~~
monster.cpp:29:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]);
      |                              ~~^~~~~~~~~~~~~
monster.cpp: In function 'void correct_long(std::vector<int>&, int)':
monster.cpp:37:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |   while(i+l+1 < v.size() && ask(v[i], v[i+l+1])) l++;
      |         ~~~~~~^~~~~~~~~~
monster.cpp: In function 'void correct(std::vector<int>&, int)':
monster.cpp:43:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |   while(i+l < v.size() && !ask(v[i-1], v[i+l])) l++;
      |         ~~~~^~~~~~~~~~
monster.cpp: In function 'std::vector<int> Solve(int)':
monster.cpp:55:16: warning: unused variable 'j' [-Wunused-variable]
   55 |   int cnt = 0, j = 0;
      |                ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4184 KB Output is correct
2 Correct 3 ms 4184 KB Output is correct
3 Correct 3 ms 4184 KB Output is correct
4 Correct 3 ms 4384 KB Output is correct
5 Correct 3 ms 4184 KB Output is correct
6 Correct 2 ms 4184 KB Output is correct
7 Correct 2 ms 4184 KB Output is correct
8 Correct 2 ms 4184 KB Output is correct
9 Correct 2 ms 4184 KB Output is correct
10 Correct 3 ms 4184 KB Output is correct
11 Correct 2 ms 4184 KB Output is correct
12 Correct 3 ms 4184 KB Output is correct
13 Correct 4 ms 4184 KB Output is correct
14 Correct 3 ms 4184 KB Output is correct
15 Correct 2 ms 4180 KB Output is correct
16 Correct 11 ms 4184 KB Output is correct
17 Correct 8 ms 4184 KB Output is correct
18 Incorrect 8 ms 4184 KB Wrong Answer [3]
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 4184 KB Output is correct
2 Correct 3 ms 4184 KB Output is correct
3 Correct 3 ms 4184 KB Output is correct
4 Correct 3 ms 4384 KB Output is correct
5 Correct 3 ms 4184 KB Output is correct
6 Correct 2 ms 4184 KB Output is correct
7 Correct 2 ms 4184 KB Output is correct
8 Correct 2 ms 4184 KB Output is correct
9 Correct 2 ms 4184 KB Output is correct
10 Correct 3 ms 4184 KB Output is correct
11 Correct 2 ms 4184 KB Output is correct
12 Correct 3 ms 4184 KB Output is correct
13 Correct 4 ms 4184 KB Output is correct
14 Correct 3 ms 4184 KB Output is correct
15 Correct 2 ms 4180 KB Output is correct
16 Correct 11 ms 4184 KB Output is correct
17 Correct 8 ms 4184 KB Output is correct
18 Incorrect 8 ms 4184 KB Wrong Answer [3]
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 43 ms 4660 KB Partially correct
2 Partially correct 50 ms 4696 KB Partially correct
3 Partially correct 58 ms 4440 KB Partially correct
4 Partially correct 51 ms 4696 KB Partially correct
5 Partially correct 62 ms 4440 KB Partially correct
6 Correct 41 ms 4668 KB Output is correct
7 Correct 44 ms 4944 KB Output is correct
8 Partially correct 66 ms 4672 KB Partially correct
9 Partially correct 72 ms 4660 KB Partially correct
10 Partially correct 52 ms 4904 KB Partially correct
11 Partially correct 70 ms 4688 KB Partially correct
12 Partially correct 57 ms 4432 KB Partially correct
13 Incorrect 54 ms 4696 KB Wrong Answer [5]
14 Halted 0 ms 0 KB -