제출 #1189441

#제출 시각아이디문제언어결과실행 시간메모리
1189441Malix코알라 (APIO17_koala)C++20
100 / 100
36 ms460 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<ll,ll,ll> ti; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define LSOne(s) ((s)&(-s)) ll INF=1000000000000000010; int inf=1e9+10; ll M=1e9+7; int minValue(int N, int W) { int a[100],b[100]; REP(i,1,100)a[i]=0; a[0]=1; playRound(a,b); int ans=0; REP(i,1,100)if(b[i]==0)ans=i; return ans; } int maxValue(int N, int W) { int a[100],b[100]; REP(i,0,100)a[i]=1; playRound(a,b); memset(a,0,sizeof(a)); REP(i,0,100)if(b[i]==2)a[i]=2; playRound(a,b); memset(a,0,sizeof(a)); REP(i,0,100)if(b[i]==3)a[i]=4; playRound(a,b); memset(a,0,sizeof(a)); REP(i,0,100)if(b[i]==5)a[i]=11; playRound(a,b); REP(i,0,100)if(b[i]==12)return i; return 0; } int greaterValue(int N, int W) { int a[100],b[100]; int l=1,r=9; while(l!=r){ int m=(l+r)/2; memset(a,0,sizeof(a)); a[0]=m;a[1]=m; playRound(a,b); if(b[0]>b[1])return 0; if(b[0]<b[1])return 1; if(b[0]>m)l=m+1; else r=m-1; } a[0]=l;a[1]=l; playRound(a,b); if(b[0]>b[1])return 0; if(b[0]<b[1])return 1; return 0; } vi arr; bool higher(int x,int y){ int a[100],b[100]; memset(a,0,sizeof(a)); a[arr[x]]=100;a[arr[y]]=100; playRound(a,b); return b[arr[x]]<b[arr[y]]; } void st(int l,int r){ if(l==r)return; int m=(l+r)/2; st(l,m); st(m+1,r); vi b(arr.begin()+l,arr.begin()+r+1); int pos=0,t=l; REP(i,m+1,r+1){ while(l<=m&&higher(l,i)){ b[pos]=arr[l]; pos++;l++; } b[pos]=arr[i]; pos++; } REP(i,l,m+1){ b[pos]=arr[i]; pos++; } REP(i,t,r+1)arr[i]=b[i-t]; } vi X={1,1,1,1,1,1,1,1,1,2,1,1,2,3,3,1,3,1,1,2,3,4,2,3,4,4,1,2,3,3,4,1,5,1,2,2,3,5,3,4,5,2,5,2,3,4,5,4,4,6,1,2,3,5,6,3,4,6,5,6,1,4,5,6,1,7,1,2,2,2,3,4,5,7,3,4,7,5,6,7,2,5,6,7,2,2,3,4,5,6,8,3,4,6,8,5,8,6,8,}; int ps=0; void solve(int l,int r){ if(l==r)return; int a[100],b[100]; memset(a,0,sizeof(a)); REP(j,l,r+1)a[arr[j]]=X[ps]; playRound(a,b); vi tmp; REP(j,l,r+1)if(b[arr[j]]<=X[ps])tmp.PB(arr[j]); int m=tmp.size(); REP(j,l,r+1)if(b[arr[j]]>X[ps])tmp.PB(arr[j]); REP(j,l,r+1)arr[j]=tmp[j-l]; ps++; solve(l,l+m-1); solve(l+m,r); } void allValues(int N, int W, int *P) { if (W == 2*N) { arr.resize(N); REP(i,0,N)arr[i]=i; st(0,N-1); REP(i,0,N)P[arr[i]]=i+1; } else { arr.resize(N); REP(i,0,N)arr[i]=i; solve(0,N-1); REP(i,0,N)P[arr[i]]=i+1; } }
#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...