比赛 |
NOIP_1 |
评测结果 |
TTTTT |
题目名称 |
画海岛地图 |
最终得分 |
0 |
用户昵称 |
BYVoid |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2008-09-03 22:03:31 |
显示代码纯文本
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("island.in");
ofstream fo("island.out");
typedef struct
{
int cnt;
int is[5];
}island;
int N,anscnt=0;
island line[9],row[9];
bool map[9][9];
void init()
{
int i,a;
fi >> N;
for (i=1;i<=N;i++)
{
line[i].cnt=0;
a=1;
while (a)
{
fi >> a;
if (a)
line[i].is[ ++line[i].cnt ]=a;
}
}
for (i=1;i<=N;i++)
{
row[i].cnt=0;
a=1;
while (a)
{
fi >> a;
if (a)
row[i].is[ ++row[i].cnt ]=a;
}
}
}
void print()
{
int i,j;
anscnt++;
fo << anscnt << endl;
for (i=1;i<=N;i++)
{
for (j=1;j<=N;j++)
fo << (map[i][j]?'*':' ');
fo << endl;
}
}
void judge()
{
int i,j=1,k=0,w;
for (w=1;w<=N;w++)
{
for (i=1;i<=N;i++)
{
if (map[i][w])
{
k++;
if (k>row[w].is[j])
return;
}
else
{
if (k==row[w].is[j])
{
j++;
k=0;
}
}
}
if (j!=row[w].cnt)
return;
}
print();
}
void go(int x,int y)
{
map[x][y]=true;
if (y+1<=N)
go(x,y+1);
else if(x+1<=N)
go(x+1,1);
else
judge();
map[x][y]=false;
if (y+1<=N)
go(x,y+1);
else if(x+1<=N)
go(x+1,1);
else
judge();
}
int main()
{
for (;;);
init();
go(1,1);
fi.close();
fo.close();
return 0;
}