比赛 |
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);
}