Checker Finished.
查看原帖
Checker Finished.
60864
tiger2005楼主2021/5/18 15:48

这次写的还挺快的(

#include "testlib.h"
#include <queue>
using namespace std;
typedef pair<int,int> pii;
priority_queue<pii, vector<pii>, greater<pii> > PQ;
int nxt[1000010];
int A[1000010], B[1000010];
int getN(int x){
	return nxt[x] == x ? x : nxt[x] = getN(nxt[x]);
} 
int main(int argc, char* argv[]) {
	registerTestlibCmd(argc, argv);
	int N, K;
	N = inf.readInt();
	K = inf.readInt();
	for(int i=1; i<=N; i++)
		A[i]=inf.readInt();
	for(int i=1; i<=N+K; i++)
		B[i]=ouf.readInt(0, 30, "arr");
	int l=1;
	for(int i=1; i<=N+K; i++)
		if(l <= N && A[l]==B[i])	++l;
	if(l != N+1)
		quitf(_wa, "Cannot identify new array from initial array.");
	for(int i=1;i<=N+K+1;i++)	nxt[i]=i;
	for(int i=1;i<=N+K;i++)	PQ.push(make_pair(B[i], i));
	while(PQ.size()>1){
		pii x = PQ.top();PQ.pop();
		pii y = PQ.top();PQ.pop();
		if(x.first != y.first || getN(x.second+1) != y.second)
			quitf(_wa, "Cannot combine [30]!");
		nxt[x.second]=y.second;
		PQ.push(make_pair(y.first+1, y.second));
	}
	if(PQ.top().first!=30)
		quitf(_wa, "Cannot combine [30]!");
	quitf(_ok, "Answer correct!");
}
2021/5/18 15:48
加载中...