QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#357113#403. Memory2Arapak2100 ✓1ms4128kbC++203.1kb2024-03-18 18:25:182024-03-18 18:25:19

Judging History

你现在查看的是最新测评结果

  • [2024-03-18 18:25:19]
  • 评测
  • 测评结果:100
  • 用时:1ms
  • 内存:4128kb
  • [2024-03-18 18:25:18]
  • 提交

answer

// Author: Kajetan Ramsza
#include "bits/stdc++.h"
#include "Memory2_lib.h"
using namespace std;

#define rep(i, a, b) for(int i = (a); i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

template<typename F, typename S> ostream& operator<<(ostream& os, const pair<F, S> &p) { return os<<"("<<p.first<<", "<<p.second<<")"; }
template<typename T> ostream &operator<<(ostream & os, const vector<T> &v) { os << "{"; typename vector< T > :: const_iterator it;
    for( it = v.begin(); it != v.end(); it++ ) { if( it != v.begin() ) os << ", "; os << *it; } return os << "}"; }

void dbg_out() { cerr<<'\n'; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr<<' '<<H; dbg_out(T...); }

#ifdef DEBUG
#define dbg(...) cerr<<"(" << #__VA_ARGS__ <<"):", dbg_out(__VA_ARGS__)
#else
#define dbg(...) 
#endif

int random(int a, int b) {
	return rand() % (b-a+1) + a;
}

int n;
vi cards;
vector<vi> ind;
vector<vi> queries;
int num = 0;

int query(int a, int b) {
	if(queries[a][b] != -1) return queries[a][b];
	return queries[a][b] = queries[b][a] = Flip(a, b);
}

void ask(int a, int b, int c) {
	int ab = query(a, b);
	int bc = query(b, c);
	int ca = query(c, a);
	if(ab == bc && bc == ca) return;
	if(ab == bc) {
		cards[b] = ab;
		ind[ab].push_back(b);
	}
	else if(bc == ca) {
		cards[c] = bc;
		ind[bc].push_back(c);
	}
	else if(ca == ab) {
		cards[a] = ca;
		ind[ca].push_back(a);
	}
	else assert(false);
	num++;
}

vi generate() {
	vi take(2*n - num, 0);
	take[0] = take[1] = take[2] = 1;
	random_shuffle(all(take));
	int pnt = 0;
	vi res;
	rep(i,0,2*n)
		if(cards[i] == -1 && take[pnt++])
			 res.push_back(i);
	return res;
}

void brute_force(const vi &pos) {
	dbg(pos);
	if(sz(pos) == 2) {
		rep(i,0,n) if(sz(ind[i]) == 0) {
			ind[i] = pos;
			cards[pos[0]] = cards[pos[1]] = i;
			return;
		}
		rep(i,0,n) {
			int que = query(pos[0], ind[i][0]);
			if(que != i) {
				ind[que].push_back(pos[0]);
				cards[pos[0]] = que;
				return;
			}
		}
		cards[pos[1]] = query(pos[0], pos[1]);
		ind[query(pos[0], pos[1])].push_back(pos[1]);
		return;
	}
	rep(i,0,sz(pos)) {
		vi vals;
	 	rep(j,0,sz(pos))
	 		if(i != j) vals.push_back(query(pos[i], pos[j]));
	 	bool same = true;
	 	for(auto x : vals)
	 		same &= x == vals[0];
	 	if(!same) continue;
 		cards[pos[i]] = vals[0];
 		ind[vals[0]].push_back(pos[i]);
 		vi new_pos;
 		rep(j,0,sz(pos)) if(i != j)
 			new_pos.push_back(pos[j]);
 		brute_force(new_pos);
 		break;
	}
}

void Solve(int t, int n_) {
	n = n_;
	dbg(t, n);
	srand(time(NULL));
	cards.assign(2*n, -1);
	queries.assign(2*n, vi(2*n, -1));
	ind.resize(n);
	while(num+4 < 2*n) {
		vi v = generate();
		ask(v[0], v[1], v[2]);
	}
	dbg(cards);
	vi pos;
	rep(i,0,2*n) if(cards[i] == -1) pos.push_back(i);
	brute_force(pos);
	int index = 0;
	rep(i,0,2*n) if(cards[i] == -1) index = i;
	rep(i,0,n)
		if(sz(ind) != 2) {
			cards[index] = i;
			ind[i].push_back(index);
		}
	dbg(cards);
	rep(i,0,n) {
		Answer(ind[i][0], ind[i][1], i);
	}
}

詳細信息

Subtask #1:

score: 10
Accepted

Test #1:

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

Test #2:

score: 0
Accepted
time: 1ms
memory: 4100kb

Test #3:

score: 0
Accepted
time: 1ms
memory: 3828kb

Test #4:

score: 0
Accepted
time: 1ms
memory: 3872kb

Test #5:

score: 0
Accepted
time: 1ms
memory: 3824kb

Test #6:

score: 0
Accepted
time: 1ms
memory: 3876kb

Test #7:

score: 0
Accepted
time: 1ms
memory: 4100kb

Test #8:

score: 0
Accepted
time: 1ms
memory: 3816kb

Subtask #2:

score: 50
Accepted

Test #9:

score: 50
Accepted
time: 1ms
memory: 3812kb

Test #10:

score: 0
Accepted
time: 1ms
memory: 3912kb

Test #11:

score: 0
Accepted
time: 1ms
memory: 3896kb

Test #12:

score: 0
Accepted
time: 1ms
memory: 3824kb

Test #13:

score: 0
Accepted
time: 1ms
memory: 3876kb

Test #14:

score: 0
Accepted
time: 0ms
memory: 3848kb

Test #15:

score: 0
Accepted
time: 1ms
memory: 3888kb

Test #16:

score: 0
Accepted
time: 0ms
memory: 3872kb

Test #17:

score: 0
Accepted
time: 1ms
memory: 3876kb

Test #18:

score: 0
Accepted
time: 0ms
memory: 3820kb

Subtask #3:

score: 40
Accepted

Test #19:

score: 40
Accepted
time: 1ms
memory: 3916kb

Test #20:

score: 0
Accepted
time: 1ms
memory: 3828kb

Test #21:

score: 0
Accepted
time: 1ms
memory: 3820kb

Test #22:

score: 0
Accepted
time: 1ms
memory: 3784kb

Test #23:

score: 0
Accepted
time: 1ms
memory: 3816kb

Test #24:

score: 0
Accepted
time: 1ms
memory: 3856kb

Test #25:

score: 0
Accepted
time: 1ms
memory: 4128kb

Test #26:

score: 0
Accepted
time: 1ms
memory: 4100kb

Test #27:

score: 0
Accepted
time: 0ms
memory: 4100kb

Test #28:

score: 0
Accepted
time: 1ms
memory: 3888kb

Extra Test:

score: 0
Extra Test Passed