Codeforces Beta Round #37 C. Old Berland Language dfs+構造

題面 : https://codeforces.com/problemset/problem/37/C

題意 : 給出一些長度,讓你只用0,1構造出這些長度的串,使得沒有一個串是另一個的前綴.

題解 : 感覺自己已經廢了,我竟然想着怎樣把這些串一個一個dfs,還在考慮用map來判斷該串是否出現過。把長度排序,然後一次dfs,若出現了我們當前要的最小的長度,就存下來,然後直接return,因爲之後的點一定不用查了。然後每次加0和1。沒了。。。

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int l,id;
	string str;
}a[1010];
int nn,n;
bool pd;
bool cmp(node aa,node bb){return aa.l<bb.l;}
bool cmp1(node aa,node bb){return aa.id<bb.id;}
void dfs(int len,string str1)
{
	if(len==a[nn].l)
	{
		a[nn].str=str1;
		nn++;
		if(nn==n+1)pd=true;
		return;
	}
	dfs(len+1,str1+"0");
	if(pd==true)return;
	dfs(len+1,str1+"1");
	if(pd==true)return;
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=1;i<=n;i++){scanf("%d",&a[i].l);a[i].id=i;}
	sort(a+1,a+n+1,cmp);
	nn=1;pd=false;
	dfs(0,"");
	if(pd==false)printf("NO");
	else
	{
		printf("YES\n");
		sort(a+1,a+n+1,cmp1);
		for(i=1;i<=n;i++)cout<<a[i].str<<endl;
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章