제출 #118054

#제출 시각아이디문제언어결과실행 시간메모리
118054samjia2000Alternating Current (BOI18_alternating)C++14
13 / 100
3034 ms11820 KiB
#include<bits/stdc++.h>

#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

typedef double db;
typedef long long LL;

int get(){
	char ch;
	while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
	if (ch=='-'){
		int s=0;
		while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
		return -s;
	}
	int s=ch-'0';
	while(ch=getchar(),ch>='0'&&ch<='9')s=s*10+ch-'0';
	return s;
}

const int N = 2e5+5;

int n,m;
struct section{
	int l,r,id;
	section(const int l_=0,const int r_=0){l=l_;r=r_;}
}s[N],a[N],b[N];
int ka,kb;

bool cmp(section a,section b){return a.l!=b.l?a.l<b.l:a.r>b.r;}

int ans[N];
bool yes;
int ad1[N],ad2[N];

void dfs(int x){
	if (x>m){
		fo(i,1,n)ad1[i]=ad2[i]=0;
		fo(i,1,m)
		if (ans[i]){
			ad1[s[i].l]++;
			if (s[i].r>=s[i].l)ad1[s[i].r+1]--;
			else ad1[1]++,ad1[s[i].r+1]--;
		}
		else{
			ad2[s[i].l]++;
			if (s[i].r>=s[i].l)ad2[s[i].r+1]--;
			else ad2[1]++,ad2[s[i].r+1]--;
		}
		fo(i,1,n)ad1[i]+=ad1[i-1],ad2[i]+=ad2[i-1];
		bool pd=1;
		fo(i,1,n)pd&=(ad1[i]>0&&ad2[i]>0);
		if (pd){
			yes=1;
			fo(i,1,m)printf("%d",ans[i]);
			return;
		}
		return;
	}
	ans[x]=0;
	dfs(x+1);
	if (yes)return;
	ans[x]=1;
	dfs(x+1);
}

int main(){
	n=get();m=get();
	int pm=m;
	fo(i,1,m){
		s[i].l=get();s[i].r=get();
		s[i].id=i;
	}
	dfs(1);
	if (!yes)printf("impossible\n");
	//else printf("possible\n");
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

alternating.cpp: In function 'int main()':
alternating.cpp:72:6: warning: unused variable 'pm' [-Wunused-variable]
  int pm=m;
      ^~
#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...