比赛 20120217 评测结果 AATTTTTTTT
题目名称 编码问题 最终得分 20
用户昵称 Truth.Cirno 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-02-17 19:57:01
显示代码纯文本
#include <cstdio>
#include <memory.h>
using namespace std;

int n,num[100],ans[100];
bool used[100],flag;

bool checked(int pos)
{
	int i,c;
	c=0;
	for (i=0;i<pos;i++)
		if (ans[i]<ans[pos])
			c++;
	if (c==num[pos])
		return(true);
	return(false);
}

void dfs(int x,int pos)
{
	int i;
	used[x]=true;
	ans[pos]=x;
	if (!checked(pos))
	{
		used[x]=false;
		return;
	}
	else
	{
		if (pos+1==n)
		{
			for (i=0;i<n;i++)
				printf("%d ",ans[i]);
			printf("\n");
			flag=true;
			used[x]=false;
			return;
		}
		for (i=0;!flag&&i<n;i++)
			if (!used[i])
				dfs(i,pos+1);
	}
	used[x]=false;
}

int main(void)
{
	freopen("code.in","r",stdin);
	freopen("code.out","w",stdout);
	int i,j,k,m,s,c;
	scanf("%d %d",&m,&n);
	for (i=0;i<m;i++)
	{
		scanf("%d",&s);
		for (j=0;j<n;j++)
			scanf("%d",&num[j]);
		if (s==1)
		{
			for (j=0;j<n;j++)
			{
				c=0;
				for (k=j-1;k>=0;k--)
					if (num[k]<num[j])
						c++;
				printf("%d ",c);
			}
			printf("\n");
		}
		else// if (s==2)
		{
			memset(used,0,sizeof(used));
			flag=false;
			for (j=0;!flag&&j<n;j++)
				dfs(j,0);
		}
	}
	return(0);
}