QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#118703#1133. Monster Gamelmeowdn0 23ms7640kbC++144.2kb2023-07-03 21:23:042023-08-16 18:39:27

Judging History

This is the latest submission verdict.

  • [2023-08-16 18:39:27]
  • 管理员手动重测本题所有提交记录
  • Verdict: 0
  • Time: 23ms
  • Memory: 7640kb
  • [2023-08-16 18:31:08]
  • 管理员手动重测本题所有提交记录
  • Verdict: 0
  • Time: 23ms
  • Memory: 7696kb
  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-03 21:23:07]
  • Judged
  • Verdict: 0
  • Time: 25ms
  • Memory: 7600kb
  • [2023-07-03 21:23:04]
  • Submitted

answer

#include "monster.h"
#include<bits/stdc++.h>
#define fi first
#define se second
#define eb emplace_back
#define mp make_pair
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
template<typename T,typename U>
T ceil(T x, U y) {return (x>0?(x+y-1)/y:x/y);}
template<typename T,typename U>
T floor(T x, U y) {return (x>0?x/y:(x-y+1)/y);}
template<class T,class S>
bool chmax(T &a,const S b) {return (a<b?a=b,1:0);}
template<class T,class S>
bool chmin(T &a,const S b) {return (a>b?a=b,1:0);}
int popcnt(int x) {return __builtin_popcount(x);}
int popcnt(ll x)  {return __builtin_popcountll(x);}
int topbit(int x) {return (x==0?-1:31-__builtin_clz(x));}
int topbit(ll x)  {return (x==0?-1:63-__builtin_clzll(x));}
int lowbit(int x) {return (x==0?-1:__builtin_ctz(x));}
int lowbit(ll x)  {return (x==0?-1:__builtin_ctzll(x));}

#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
typedef pair<int,int> pii; 
typedef vector<int> vi;
typedef vector<pii> vp;
typedef tuple<int,int,int> tiii;
int read() {
  int x=0,w=1; char c=getchar(); 
  while(!isdigit(c)) {if(c=='-') w=-1; c=getchar();}
  while(isdigit(c)) {x=x*10+(c-'0'); c=getchar();}
  return x*w;
}

namespace {
  const int N=1005;
  int xn,deg[N],e[N][N];
}

int qry(int x,int y) {
  if(e[x][y]) return e[x][y];
  if(Query(x,y)) e[x][y]=1, e[y][x]=-1;
  else e[x][y]=-1, e[y][x]=1;
  return e[x][y];
}

vi solvesmall(vi p) {
  int n=p.size();
  rep(i,0,xn-1) deg[i]=0;
  rep(i,0,n-1) rep(j,i+1,n-1) qry(p[i],p[j]);
  rep(i,0,n-1) rep(j,0,n-1) deg[p[i]]+=(e[p[i]][p[j]]>0);
  int l=0, r=0;
  rep(i,0,n-1) if(deg[p[i]]==0) l=1;
  rep(i,0,n-1) if(deg[p[i]]==n-1) r=1;
  if(l&&r) return {l,r,0};
  else if(l) return {l};
  else if(r) return {0,r};
  vi q(n);
  rep(i,0,n-1) q[i]=-1;
  rep(i,0,n-1) {
    int u=p[i];
    if(deg[u]==l+1) {
      if(q[l+1]==-1) q[l+1]=u;
      else q[l+0]=u;
    } else if(deg[u]==n-2-r) {
      if(q[n-2-r]==-1) q[n-2-r]=u;
      else q[n-1-r]=u;
    } else q[deg[u]]=u;
  }
  if(qry(q[l],q[l+1])==-1) swap(q[l],q[l+1]);
  if(qry(q[n-2-r],q[n-1-r])==-1) swap(q[n-2-r],q[n-1-r]);
  return q;
}

vi Solve(int n) {
  vi p={0}; xn=n;
  if(n>8) {
    rep(i,1,n-1) {
      int x=qry(p[0],i), y=qry(p[i-1],i);
      //cout<<"  "<<x<<" "<<y<<endl;
      if(x==1) p.insert(p.begin(),i);
      else if(y==-1) p.insert(p.end(),i);
      else {
        int l=0, r=i-1;
        while(l<r) {
          int mid=l+r>>1;
          if(qry(p[mid],i)==1) r=mid;
          else l=mid+1;
        }
        p.insert(p.begin()+r,i);
      }
      //for(int x:p) cout<<x<<" "; puts("");
    }
    rep(i,0,n-2) assert(qry(p[i],p[i+1])==-1);
    int lb=4,rb=n-5;
    vi t={p[0],p[1],p[2],p[3]}; t=solvesmall(t);
    if(t.size()==4) {
      bool flag=1;
      rep(i,0,3) flag|=(p[i]==t[3-i]);
      if(flag) lb=0;
      else rep(i,0,3) p[i]=t[i];
    } else if(t.size()==3) lb=2;
    else if(t.size()==2) lb=3;
    else if(t.size()==1) lb=1;
    t={p[n-4],p[n-3],p[n-2],p[n-1]}; t=solvesmall(t);
    if(t.size()==4) {
      bool flag=1;
      rep(i,0,3) flag|=(p[n-4+i]==t[3-i]);
      if(flag) rb=n-1;
      else rep(i,0,3) p[n-4+i]=t[i];
    } else if(t.size()==3) rb=n-3;
    else if(t.size()==2) rb=n-2;
    else if(t.size()==1) rb=n-4;
    //for(int x:p) cout<<x<<" "; puts("");
    //cout<<"JIE "<<lb<<" "<<rb<<endl;
    rep(i,lb,rb) {
      int j=i+2; if(j>rb) break;
      if(i>0&&qry(p[i-1],p[i])==1) continue;
      while(j<=rb&&qry(p[i],p[j])==1) j++;
      //cout<<j<<endl;
      if(j!=rb+1&&j!=i+2&&qry(p[i+1],p[j-1])==-1) --j;
      //cout<<i<<" "<<j<<endl;
      reverse(p.begin()+i,p.begin()+j);
      i=j-1;
    }
    if(qry(p[rb-1],p[rb])==-1) swap(p[rb-1],p[rb]);
    //for(int x:p) cout<<x<<" "; puts("");
    t={p[0],p[1],p[2],p[3]}; t=solvesmall(t);
    rep(i,0,3) p[i]=t[i];
    //for(int x:p) cout<<x<<" "; puts("");
    t={p[n-4],p[n-3],p[n-2],p[n-1]}; t=solvesmall(t);
    rep(i,0,3) p[n-4+i]=t[i];
    //for(int x:p) cout<<x<<" "; puts("");
  } else {
    rep(i,1,n-1) p.eb(i);
    p=solvesmall(p);
  }
  vi q(n);
  rep(i,0,n-1) q[p[i]]=i;
  return q;
}

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 10
Accepted
time: 0ms
memory: 3660kb

input:

4
0
1
1
0
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 1 2
Q 1 3
Q 2 3
F 4
 2 1 0 3

result:

points 1.0 points  1.0

Test #2:

score: 10
Accepted
time: 0ms
memory: 3732kb

input:

4
1
0
0
1
1
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 1 2
Q 1 3
Q 2 3
F 4
 1 2 0 3

result:

points 1.0 points  1.0

Test #3:

score: 10
Accepted
time: 1ms
memory: 3712kb

input:

4
1
1
0
1
0
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 1 2
Q 1 3
Q 2 3
F 4
 3 0 1 2

result:

points 1.0 points  1.0

Test #4:

score: 10
Accepted
time: 0ms
memory: 3668kb

input:

5
0
1
0
1
0
0
0
1
1
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 1 2
Q 1 3
Q 1 4
Q 2 3
Q 2 4
Q 3 4
F 5
 2 1 3 4 0

result:

points 1.0 points  1.0

Test #5:

score: 10
Accepted
time: 1ms
memory: 3716kb

input:

5
1
1
0
1
0
1
0
0
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 1 2
Q 1 3
Q 1 4
Q 2 3
Q 2 4
Q 3 4
F 5
 3 1 0 2 4

result:

points 1.0 points  1.0

Test #6:

score: 10
Accepted
time: 0ms
memory: 3832kb

input:

5
0
1
1
0
0
1
1
1
1
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 1 2
Q 1 3
Q 1 4
Q 2 3
Q 2 4
Q 3 4
F 5
 2 4 3 0 1

result:

points 1.0 points  1.0

Test #7:

score: 10
Accepted
time: 1ms
memory: 3788kb

input:

6
1
1
0
1
0
1
1
1
1
0
0
1
1
1
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 2 3
Q 2 4
Q 2 5
Q 3 4
Q 3 5
Q 4 5
F 6
 3 4 1 5 0 2

result:

points 1.0 points  1.0

Test #8:

score: 10
Accepted
time: 1ms
memory: 3720kb

input:

6
0
0
1
0
0
0
1
1
1
1
0
1
1
1
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 2 3
Q 2 4
Q 2 5
Q 3 4
Q 3 5
Q 4 5
F 6
 1 5 4 2 3 0

result:

points 1.0 points  1.0

Test #9:

score: 10
Accepted
time: 1ms
memory: 3800kb

input:

6
1
1
1
0
1
1
0
1
1
1
0
0
0
1
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 2 3
Q 2 4
Q 2 5
Q 3 4
Q 3 5
Q 4 5
F 6
 5 3 1 2 4 0

result:

points 1.0 points  1.0

Test #10:

score: 10
Accepted
time: 0ms
memory: 3740kb

input:

7
0
0
1
0
0
0
1
1
1
0
1
1
0
1
0
1
0
0
0
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 3 4
Q 3 5
Q 3 6
Q 4 5
Q 4 6
Q 5 6
F 7
 0 5 3 1 2 4 6

result:

points 1.0 points  1.0

Test #11:

score: 10
Accepted
time: 0ms
memory: 3728kb

input:

7
0
1
0
1
1
1
0
0
0
1
1
1
1
1
1
1
1
1
1
0
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 3 4
Q 3 5
Q 3 6
Q 4 5
Q 4 6
Q 5 6
F 7
 4 3 5 6 2 0 1

result:

points 1.0 points  1.0

Test #12:

score: 10
Accepted
time: 1ms
memory: 3732kb

input:

7
0
0
0
1
0
0
0
1
1
0
1
1
0
0
0
0
0
0
0
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 3 4
Q 3 5
Q 3 6
Q 4 5
Q 4 6
Q 5 6
F 7
 1 4 3 0 2 6 5

result:

points 1.0 points  1.0

Test #13:

score: 10
Accepted
time: 2ms
memory: 3728kb

input:

8
0
0
1
0
1
0
0
0
0
1
1
0
1
1
1
1
0
1
0
1
0
1
1
1
1
0
1
1

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 0 7
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 1 7
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 2 7
Q 3 4
Q 3 5
Q 3 6
Q 3 7
Q 4 5
Q 4 6
Q 4 7
Q 5 6
Q 5 7
Q 6 7
F 8
 2 4 7 3 5 0 6 1

result:

points 1.0 points  1.0

Test #14:

score: 10
Accepted
time: 0ms
memory: 3744kb

input:

8
1
1
0
1
1
0
1
1
0
0
0
0
0
0
1
1
0
0
1
1
1
0
0
0
0
1
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 0 7
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 1 7
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 2 7
Q 3 4
Q 3 5
Q 3 6
Q 3 7
Q 4 5
Q 4 6
Q 4 7
Q 5 6
Q 5 7
Q 6 7
F 8
 5 1 2 7 0 3 4 6

result:

points 1.0 points  1.0

Test #15:

score: 10
Accepted
time: 2ms
memory: 3792kb

input:

8
1
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0

output:

Q 0 1
Q 0 2
Q 0 3
Q 0 4
Q 0 5
Q 0 6
Q 0 7
Q 1 2
Q 1 3
Q 1 4
Q 1 5
Q 1 6
Q 1 7
Q 2 3
Q 2 4
Q 2 5
Q 2 6
Q 2 7
Q 3 4
Q 3 5
Q 3 6
Q 3 7
Q 4 5
Q 4 6
Q 4 7
Q 5 6
Q 5 7
Q 6 7
F 8
 1 2 0 4 6 5 3 7

result:

points 1.0 points  1.0

Test #16:

score: 0
Wrong Answer
time: 3ms
memory: 4484kb

input:

198
1
0
0
0
1
0
1
1
1
1
0
1
0
1
1
0
1
1
1
0
1
1
0
0
0
1
1
0
1
0
1
1
0
1
0
1
0
1
1
1
0
1
0
0
0
0
1
0
1
0
0
1
0
0
1
0
0
1
0
0
1
1
0
1
1
0
1
1
0
1
1
0
0
0
0
1
1
1
1
0
0
1
0
1
0
0
0
1
0
1
1
0
0
1
0
0
0
0
0
1
1
0
0
0
0
1
0
0
0
0
0
1
0
0
1
1
1
0
1
1
0
0
1
0
0
1
1
0
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
0
0
1
0
1
...

output:

Q 0 1
Q 1 2
Q 0 2
Q 1 3
Q 2 3
Q 0 3
Q 1 4
Q 2 4
Q 4 5
Q 2 5
Q 5 6
Q 2 6
Q 1 6
Q 3 6
Q 0 6
Q 5 7
Q 2 7
Q 6 7
Q 4 7
Q 5 8
Q 2 8
Q 1 8
Q 7 8
Q 4 8
Q 5 9
Q 2 9
Q 1 9
Q 4 9
Q 8 9
Q 5 10
Q 2 10
Q 8 10
Q 4 10
Q 9 10
Q 5 11
Q 2 11
Q 8 11
Q 0 11
Q 6 11
Q 1 11
Q 5 12
Q 2 12
Q 8 12
Q 6 12
Q 3 12
Q 5 13
Q 2 13
...

result:

wrong answer Wrong Answer [3]

Subtask #2:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 6ms
memory: 7620kb

input:

995
0
0
1
1
1
0
1
0
1
0
1
1
1
0
1
1
1
0
1
0
1
0
0
1
0
0
1
0
0
0
0
0
1
1
0
0
0
1
0
1
1
0
0
1
1
0
0
0
1
0
1
1
0
0
1
1
0
1
0
0
1
1
1
1
0
1
1
0
1
1
0
1
0
0
1
0
0
1
0
1
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1
0
1
1
0
1
1
0
0
1
0
1
1
1
0
0
1
0
0
0
1
1
0
1
1
1
1
0
1
0
1
1
0
1
0
0
1
0
1
0
1
1
0
1
0
0
0
1
1
0
1
0
1
1
...

output:

Q 0 1
Q 0 2
Q 1 2
Q 0 3
Q 1 3
Q 3 4
Q 1 4
Q 0 4
Q 2 4
Q 3 5
Q 1 5
Q 4 5
Q 0 5
Q 3 6
Q 1 6
Q 0 6
Q 5 6
Q 3 7
Q 1 7
Q 0 7
Q 2 7
Q 4 7
Q 3 8
Q 1 8
Q 0 8
Q 7 8
Q 2 8
Q 3 9
Q 1 9
Q 3 10
Q 9 10
Q 3 11
Q 10 11
Q 7 11
Q 5 11
Q 4 11
Q 3 12
Q 10 12
Q 11 12
Q 2 12
Q 8 12
Q 7 12
Q 3 13
Q 10 13
Q 7 13
Q 0 13
Q 1...

result:

wrong answer Wrong Answer [3]

Subtask #3:

score: 0
Wrong Answer

Test #45:

score: 0
Wrong Answer
time: 23ms
memory: 7640kb

input:

998
0
0
1
0
1
0
0
1
0
1
0
1
0
0
0
1
1
1
0
1
1
0
1
0
1
0
0
0
0
1
1
0
0
0
1
0
0
0
0
1
1
0
0
0
1
1
0
1
1
0
1
0
0
1
0
1
1
0
1
1
0
1
0
0
1
0
1
0
1
0
1
1
1
0
0
0
1
1
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
0
0
0
0
1
0
1
1
0
0
1
0
1
0
1
0
0
1
1
1
1
1
0
1
0
0
0
1
0
0
1
1
1
1
0
1
0
1
1
0
0
0
0
1
1
0
1
0
1
0
1
0
1
0
1
...

output:

Q 0 1
Q 0 2
Q 1 2
Q 0 3
Q 1 3
Q 2 3
Q 0 4
Q 1 4
Q 2 4
Q 3 4
Q 0 5
Q 1 5
Q 4 5
Q 3 5
Q 0 6
Q 1 6
Q 4 6
Q 2 6
Q 0 7
Q 1 7
Q 4 7
Q 6 7
Q 2 7
Q 0 8
Q 1 8
Q 2 8
Q 3 8
Q 5 8
Q 0 9
Q 1 9
Q 4 9
Q 7 9
Q 2 9
Q 0 10
Q 1 10
Q 9 10
Q 5 10
Q 8 10
Q 0 11
Q 1 11
Q 4 11
Q 7 11
Q 9 11
Q 0 12
Q 1 12
Q 11 12
Q 7 12
Q 9...

result:

wrong answer Wrong Answer [3]