답안 #280500

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
280500 2020-08-22T20:47:52 Z amiratou 최후의 만찬 (IOI12_supper) C++14
43 / 100
334 ms 25240 KB
#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define sz(x) (int)(x.size())
typedef pair<int,int> ii;
const int INF = (int)(1e9);

vector<int> vec[100005];
int occ[100005];
set<ii,greater<ii> > myset;
int pos[100005],in[100005];

void ComputeAdvice(int *C, int N, int K, int M) {
	int l=31-__builtin_clz(K+1)+1;
	//cerr<<l<<"qldakjlsnjk\n";
	for (int i = 0; i < N; ++i)
	{
		pos[i]=i;
		occ[i]=sz(vec[C[i]]);
		vec[C[i]].push_back(i);
	}
	for (int i = 0; i < K; ++i){
		in[i]=1;
		if(!sz(vec[i]))myset.insert({INF,i});
		else myset.insert({vec[i][0],i});
	}
	vector<int> code;
	for (int i = 0; i < N; ++i)
	{
		if(in[C[i]]){
			myset.erase({i,C[i]});
			if((occ[i]+1)<sz(vec[C[i]]))myset.insert({vec[C[i]][occ[i]+1],C[i]});
			else myset.insert({INF,C[i]});
		}
		else{
			//cerr<<C[i]<<"\n";
			ii h=*myset.begin();
			myset.erase(myset.begin());
			//cerr<<h.se<<"**\n";
			assert(in[h.se]==1);
			code.push_back(pos[h.se]);
			in[h.se]=0,in[C[i]]=1;
			if((occ[i]+1)<sz(vec[C[i]]))myset.insert({vec[C[i]][occ[i]+1],C[i]});
			else myset.insert({INF,C[i]});
			pos[C[i]]=pos[h.se];
		}
		assert(sz(myset)==K);
		/*for(auto it:myset){
			cerr<<it.fi<<","<<it.se<<"\n";
		}
		cerr<<"--------\n";*/
	}
	//cerr<<l<<" ";
	for(auto it:code){
		//cerr<<it<<" ";
		for (int i = 0; i < l; ++i){
			//cerr<<((it>>i)&1)<<" ";
			WriteAdvice(((it>>i)&1));
		}
		//cerr<<"\n";
	}
	//cerr<<"\n";
}
#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define sz(x) (int)(x.size())
typedef pair<int,int> ii;
const int INF = (int)(1e9);

int tab[100005],here[100005];

void Assist(unsigned char *A, int N, int K, int R) {
	int l=31-__builtin_clz(K+1)+1;
	for (int i = 0; i < K; ++i)
		tab[i]=i,here[i]=1;
	assert(!(R%l));
	vector<int> vec;
	for (int i = 0; i < R; i+=l)
	{
		int nb=0;
		for (int j = 0; j < l; ++j)
			if(A[i+j]==1)nb+=(1<<j);
		vec.push_back(nb);
	}
	int idx=0;
	for (int i = 0; i < N; ++i)
	{
		int h=GetRequest();
		if(!here[h]){
			assert(idx<sz(vec));
			here[tab[vec[idx]]]=0;
			here[h]=1;
			PutBack(tab[vec[idx]]);
			tab[vec[idx]]=h;
			idx++;
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5376 KB Output is correct
2 Correct 2 ms 5376 KB Output is correct
3 Correct 4 ms 5632 KB Output is correct
4 Correct 7 ms 5632 KB Output is correct
5 Correct 7 ms 5888 KB Output is correct
6 Correct 12 ms 6144 KB Output is correct
7 Correct 8 ms 5632 KB Output is correct
8 Correct 13 ms 6208 KB Output is correct
9 Correct 15 ms 6144 KB Output is correct
10 Correct 12 ms 6144 KB Output is correct
11 Correct 12 ms 6144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 6912 KB Output is correct
2 Correct 98 ms 10816 KB Output is correct
3 Correct 308 ms 24080 KB Output is correct
4 Correct 201 ms 17376 KB Output is correct
5 Correct 315 ms 19480 KB Output is correct
6 Correct 289 ms 19880 KB Output is correct
7 Correct 272 ms 20296 KB Output is correct
8 Correct 284 ms 22288 KB Output is correct
9 Correct 160 ms 13896 KB Output is correct
10 Correct 258 ms 20624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 17600 KB Output is correct
2 Correct 265 ms 20336 KB Output is correct
3 Correct 262 ms 20600 KB Output is correct
4 Correct 247 ms 19608 KB Output is correct
5 Correct 210 ms 17144 KB Output is correct
6 Correct 259 ms 20600 KB Output is correct
7 Correct 256 ms 20088 KB Output is correct
8 Correct 334 ms 25240 KB Output is correct
9 Correct 169 ms 16424 KB Output is correct
10 Correct 271 ms 20480 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 5888 KB Error - advice is too long
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 297 ms 20560 KB Output is partially correct - 772365 bits used
2 Correct 266 ms 20320 KB Output is partially correct - 742095 bits used
3 Correct 268 ms 20736 KB Output is partially correct - 712470 bits used
4 Correct 274 ms 20600 KB Output is partially correct - 712005 bits used
5 Correct 263 ms 20344 KB Output is partially correct - 710610 bits used
6 Correct 258 ms 20856 KB Output is partially correct - 712155 bits used
7 Correct 264 ms 20416 KB Output is partially correct - 711090 bits used
8 Correct 260 ms 20600 KB Output is partially correct - 713340 bits used
9 Correct 261 ms 20600 KB Output is partially correct - 712830 bits used
10 Correct 331 ms 25232 KB Output is partially correct - 1117620 bits used