답안 #928670

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
928670 2024-02-17T01:21:44 Z MilosMilutinovic 길고양이 (JOI20_stray) C++14
20 / 100
35 ms 16096 KB
#include "Anthony.h"
#include<bits/stdc++.h>
 
using namespace std;
 
namespace {
const int seq[]={1,0,1,1,0,0};
int n,tot;
int v[40005],nxt[40005],h[20005],d[20005],q[20005],idx[20005];
vector<int> ret;
 
void addedge(int x,int y){
	v[++tot]=y; nxt[tot]=h[x]; h[x]=tot;
	v[++tot]=x; nxt[tot]=h[y]; h[y]=tot;
}
 
void bfs(){
	for(int i=0;i<n;i++) d[i]=-1;
	int front=0,rear=0;
	q[rear++]=0; d[0]=0;
	while(front<rear){
		int x=q[front];
		for(int p=h[x];p;p=nxt[p]){
			if(d[v[p]]==-1){
				d[v[p]]=d[x]+1;
				q[rear++]=v[p];
			}
		}
		++front;
	}
}

void dfs(int x,int fa,int lst,int i){
	int ch=0;
	for(int p=h[x];p;p=nxt[p]) if(v[p]!=fa) ch++;
	if(ch==0) return;
	if(ch==1){
		for(int p=h[x];p;p=nxt[p]){
			if(v[p]==fa) continue;
			ret[idx[v[p]]]=(lst^seq[i]);
			dfs(v[p],x,lst,(i+1)%6);
		}
	}else{
		for(int p=h[x];p;p=nxt[p]){
			if(v[p]==fa) continue;
			ret[idx[v[p]]]=(x==0?0:ret[idx[x]])^1;
			dfs(v[p],x,x==0?0:ret[idx[x]],1);
		}
	}
}
}
 
vector<int> Mark(int n,int m,int a,int b,vector<int> u,vector<int> v){
	::n=n;
	tot=0;
	for(int i=0;i<n;i++) h[i]=0;
	for(int i=0;i<m;i++) addedge(u[i],v[i]);
	if(a>=3){
		bfs();
		vector<int> col(m);
		for(int i=0;i<m;i++) col[i]=min(d[u[i]],d[v[i]])%3;
		return col;
	}else{
		bfs();
		for(int i=0;i<m;i++){
			if(d[u[i]]>d[v[i]]) swap(u[i],v[i]);
			idx[v[i]]=i;
		}
		ret.resize(m);
		dfs(0,0,0,0);
		return ret;
	}
	return vector<int>(m,0);
}
#include "Catherine.h"
#include<bits/stdc++.h>

#define pb push_back
 
using namespace std;
 
namespace {
 
const int seq[]={1,0,1,1,0,0};
int a,b;
bool up;
vector<int> edg,pth;

bool Down(){
	for(int i=0;i<6;i++){
		int cnt=0;
		for(int j=0;j<(int)pth.size();j++){
			cnt+=(seq[(i+j)%6]==pth[j]);
		}
		if(cnt==0||cnt==(int)pth.size()) return true;
	}
	return false;
}
}  // namespace
 
void Init(int A,int B){
	a=A; b=B;
	up=false;
	edg.clear();
	pth.clear();
}
 
int Move(vector<int> y){
	if(a>=3){
		int cnt=0;
		for(int i=0;i<a;i++) cnt+=(y[i]>0?1:0);
		if(cnt==1){
			for(int i=0;i<a;i++) if(y[i]>0) return i;
		}
		for(int i=0;i<a;i++){
			if(y[i]>0&&y[(i+1)%3]>0) return i;
		}
	}
	if(up){
		if(y[0]==0&&y[1]==0){
			edg.pb(edg.back());
			return -1;
		}
		if(y[0]==0){
			assert(y[1]>0);
			edg.pb(1);
			return 1;
		}
		if(y[1]==0){
			assert(y[0]>0);
			edg.pb(0);
			return 0;
		}
		int t=edg.back();
		edg.pb(t^1);
		return t^1;
	}
	if(y[0]+y[1]+(!edg.empty()?1:0)==1){
		up=true;
		if(!edg.empty()) y[edg.back()]++;
		for(int i=0;i<2;i++){
			if(y[i]==1){
				int v;
				if(!edg.empty()&&edg.back()==i) v=-1;
				else v=i;
				edg.pb(i);
				return v;
			}
		}
	}
	if(y[0]+y[1]+(!edg.empty()?1:0)>2){
		up=true;
		if(!edg.empty()) y[edg.back()]++;
		for(int i=0;i<2;i++){
			if(y[i]==1){
				int v;
				if(!edg.empty()&&edg.back()==i) v=-1;
				else v=i;
				edg.pb(i);
				return v;
			}
		}
	}
	if((int)edg.size()<3){
		if(y[0]==0&&y[1]==0){
			up=true;
			edg.pb(edg.back());
			return -1;
		}
		if(y[0]==0){
			edg.pb(1);
			pth.pb(1);
			if(y[1]==2) pth.pb(1);
			return 1;
		}
		if(y[1]!=0) pth.pb(1);
		else if(y[0]==2) pth.pb(0);
		edg.pb(0);
		pth.pb(0);
		return 0;
	}
	assert(y[0]+y[1]==1);
	if(y[0]==1) pth.pb(0);
	else assert(y[1]>0),pth.pb(1);
	if(!Down()){
		up=true;
		edg.pb(edg.back());
		return -1;
	}else{
		up=true;
		if(y[0]==1){
			edg.pb(0);
			return 0;
		}else{
			assert(y[1]>0);
			edg.pb(1);
			return 1;
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 14964 KB Output is correct
2 Correct 1 ms 784 KB Output is correct
3 Correct 25 ms 14164 KB Output is correct
4 Correct 32 ms 16096 KB Output is correct
5 Correct 34 ms 15960 KB Output is correct
6 Correct 25 ms 14724 KB Output is correct
7 Correct 26 ms 14712 KB Output is correct
8 Correct 30 ms 15472 KB Output is correct
9 Correct 30 ms 15484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 14964 KB Output is correct
2 Correct 1 ms 784 KB Output is correct
3 Correct 25 ms 14164 KB Output is correct
4 Correct 32 ms 16096 KB Output is correct
5 Correct 34 ms 15960 KB Output is correct
6 Correct 25 ms 14724 KB Output is correct
7 Correct 26 ms 14712 KB Output is correct
8 Correct 30 ms 15472 KB Output is correct
9 Correct 30 ms 15484 KB Output is correct
10 Correct 28 ms 12904 KB Output is correct
11 Correct 24 ms 12820 KB Output is correct
12 Correct 23 ms 12924 KB Output is correct
13 Correct 23 ms 12924 KB Output is correct
14 Correct 24 ms 13120 KB Output is correct
15 Correct 26 ms 13680 KB Output is correct
16 Correct 32 ms 15480 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 12396 KB Output is correct
2 Correct 0 ms 780 KB Output is correct
3 Correct 21 ms 11868 KB Output is correct
4 Correct 30 ms 13944 KB Output is correct
5 Correct 30 ms 13912 KB Output is correct
6 Correct 24 ms 12400 KB Output is correct
7 Correct 24 ms 12424 KB Output is correct
8 Correct 28 ms 13180 KB Output is correct
9 Correct 28 ms 13184 KB Output is correct
10 Correct 27 ms 12912 KB Output is correct
11 Correct 27 ms 12996 KB Output is correct
12 Correct 26 ms 12868 KB Output is correct
13 Correct 27 ms 12896 KB Output is correct
14 Correct 30 ms 13280 KB Output is correct
15 Correct 35 ms 13168 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 12396 KB Output is correct
2 Correct 0 ms 780 KB Output is correct
3 Correct 21 ms 11868 KB Output is correct
4 Correct 30 ms 13944 KB Output is correct
5 Correct 30 ms 13912 KB Output is correct
6 Correct 24 ms 12400 KB Output is correct
7 Correct 24 ms 12424 KB Output is correct
8 Correct 28 ms 13180 KB Output is correct
9 Correct 28 ms 13184 KB Output is correct
10 Correct 27 ms 12912 KB Output is correct
11 Correct 27 ms 12996 KB Output is correct
12 Correct 26 ms 12868 KB Output is correct
13 Correct 27 ms 12896 KB Output is correct
14 Correct 30 ms 13280 KB Output is correct
15 Correct 35 ms 13168 KB Output is correct
16 Correct 21 ms 10860 KB Output is correct
17 Correct 22 ms 10880 KB Output is correct
18 Correct 24 ms 10876 KB Output is correct
19 Correct 22 ms 10868 KB Output is correct
20 Correct 30 ms 11640 KB Output is correct
21 Correct 25 ms 11324 KB Output is correct
22 Correct 33 ms 13424 KB Output is correct
23 Correct 23 ms 11112 KB Output is correct
24 Correct 30 ms 10992 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1056 KB Output is correct
2 Correct 0 ms 784 KB Output is correct
3 Correct 2 ms 1048 KB Output is correct
4 Correct 2 ms 1044 KB Output is correct
5 Correct 2 ms 1056 KB Output is correct
6 Correct 2 ms 1056 KB Output is correct
7 Correct 2 ms 1056 KB Output is correct
8 Correct 2 ms 1048 KB Output is correct
9 Correct 2 ms 1056 KB Output is correct
10 Correct 2 ms 1048 KB Output is correct
11 Correct 2 ms 1048 KB Output is correct
12 Correct 1 ms 1048 KB Output is correct
13 Correct 2 ms 1708 KB Output is correct
14 Correct 2 ms 1048 KB Output is correct
15 Correct 1 ms 1040 KB Output is correct
16 Correct 2 ms 1048 KB Output is correct
17 Correct 2 ms 1056 KB Output is correct
18 Correct 1 ms 1056 KB Output is correct
19 Correct 1 ms 1052 KB Output is correct
20 Correct 1 ms 1056 KB Output is correct
21 Correct 2 ms 1056 KB Output is correct
22 Correct 2 ms 1304 KB Output is correct
23 Correct 2 ms 1056 KB Output is correct
24 Correct 2 ms 1056 KB Output is correct
25 Correct 1 ms 1056 KB Output is correct
26 Correct 2 ms 1052 KB Output is correct
27 Correct 2 ms 1048 KB Output is correct
28 Correct 0 ms 1056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 10880 KB Output is correct
2 Correct 25 ms 12156 KB Output is correct
3 Correct 0 ms 796 KB Output is correct
4 Correct 20 ms 10368 KB Output is correct
5 Correct 30 ms 13692 KB Output is correct
6 Correct 31 ms 13912 KB Output is correct
7 Incorrect 26 ms 12736 KB Wrong Answer [6]
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 10872 KB Output is correct
2 Correct 24 ms 12148 KB Output is correct
3 Correct 0 ms 796 KB Output is correct
4 Correct 20 ms 10256 KB Output is correct
5 Correct 29 ms 13588 KB Output is correct
6 Correct 29 ms 13684 KB Output is correct
7 Correct 25 ms 12668 KB Output is correct
8 Correct 26 ms 12640 KB Output is correct
9 Correct 29 ms 13904 KB Output is correct
10 Correct 30 ms 13688 KB Output is correct
11 Correct 30 ms 13684 KB Output is correct
12 Correct 30 ms 13684 KB Output is correct
13 Correct 28 ms 13700 KB Output is correct
14 Correct 32 ms 13756 KB Output is correct
15 Incorrect 26 ms 13700 KB Wrong Answer [6]
16 Halted 0 ms 0 KB -