Submission #1030948

#TimeUsernameProblemLanguageResultExecution timeMemory
1030948AdamGSMonster Game (JOI21_monster)C++17
100 / 100
55 ms600 KiB
#include "monster.h"
#include<bits/stdc++.h>
using namespace std;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
map<pair<int,int>,int>mp;
bool query(int a, int b) {
  return Query(a, b);
  if(mp.find({a, b})!=mp.end()) return mp[{a, b}];
  if(Query(a, b)) {
    mp[{a, b}]=1;
    mp[{b, a}]=0;
  } else {
    mp[{b, a}]=1;
    mp[{a, b}]=0;
  }
  return mp[{a, b}];
}
vector<int>cd(vector<int>T) {
  if(T.size()==1) return T;
  vector<int>A, B;
  rep(i, T.size()/2) A.pb(T[i]);
  for(int i=T.size()/2; i<T.size(); ++i) B.pb(T[i]);
  A=cd(A);
  B=cd(B);
  int l1=0, l2=0;
  vector<int>P;
  while(l1<A.size() && l2<B.size()) {
    if(query(A[l1], B[l2])==false) P.pb(A[l1++]);
    else P.pb(B[l2++]);
  }
  while(l1<A.size()) P.pb(A[l1++]);
  while(l2<B.size()) P.pb(B[l2++]);
  return P;
}
vector<int>Solve(int n) {
  vector<int>T(n);
  rep(i, n) T[i]=i;
  T=cd(T);
  string s="";
  if(query(T[0], T[2])) s+="1"; else s+="0";
  if(query(T[0], T[3])) s+="1"; else s+="0";
  if(query(T[1], T[3])) s+="1"; else s+="0";
  int l=0;
  if(s=="001" || s=="011" || s=="101") {
    l=1;
  } else if(s=="000" || s=="010") {
    reverse(T.begin(), T.begin()+2);
    l=2;
  } else if(s=="110") {
    reverse(T.begin(), T.begin()+3);
    l=3;
  } else if(s=="111") {
    l=4;
    while(l<n) {
      if(query(T[l-2], T[l])==false) break;
      ++l;
    }
    reverse(T.begin(), T.begin()+l);
  } else {
    l=4;
    while(l<n) {
      if(query(T[0], T[l])==true) {
        swap(T[0], T[2]);
        break;
      }
      if(query(T[1], T[l])==true) {
        swap(T[1], T[2]);
        break;
      }
      if(query(T[2], T[l])==true) {
        swap(T[0], T[1]);
        break;
      }
      ++l;
    }
    ++l;
    reverse(T.begin()+3, T.begin()+l);
  }
  while(l<n) {
    int p=l;
    while(query(T[l-1], T[p])==false) ++p;
    reverse(T.begin()+l, T.begin()+p+1);
    l=p+1;
  }
  vector<int>P(n);
  rep(i, n) P[T[i]]=i;
  return P;
}

Compilation message (stderr)

monster.cpp: In function 'std::vector<int> cd(std::vector<int>)':
monster.cpp:4:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define rep(a, b) for(int a = 0; a < (b); ++a)
      |                                    ^
monster.cpp:25:3: note: in expansion of macro 'rep'
   25 |   rep(i, T.size()/2) A.pb(T[i]);
      |   ^~~
monster.cpp:26:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |   for(int i=T.size()/2; i<T.size(); ++i) B.pb(T[i]);
      |                         ~^~~~~~~~~
monster.cpp:31:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |   while(l1<A.size() && l2<B.size()) {
      |         ~~^~~~~~~~~
monster.cpp:31:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |   while(l1<A.size() && l2<B.size()) {
      |                        ~~^~~~~~~~~
monster.cpp:35:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   while(l1<A.size()) P.pb(A[l1++]);
      |         ~~^~~~~~~~~
monster.cpp:36:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |   while(l2<B.size()) P.pb(B[l2++]);
      |         ~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...