比赛 |
20120705 |
评测结果 |
C |
题目名称 |
绘画 |
最终得分 |
0 |
用户昵称 |
Czb。 |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-07-05 11:59:53 |
显示代码纯文本
#include<stdio.h>
#include<vector>
#include<set>
using namespace std;
struct orz
{
char c;
int x1,x2,y1,y2,k,last;
}a[100001];
int n,m,ans[1001][1001];
char str[10];
vector <int> Save;
set <int> s[1001];
set <int> :: iterator it,tmp;
void dfs(int k)
{
if(k<=0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",ans[i][j]);
}
printf("\n");
}
exit(0);
}
if(a[k].c=='P')
{
for(int ii=a[k].x1;ii<=a[k].x2;ii++)
{
for(it=s[ii].lower_bound(a[k].y1);it!=s[ii].end();it++)
{
if(*it>a[k].y2)break;
if((ii+*it-a[k].x1-a[k].y1)%2==0)
{
ans[ii][*it]=a[k].k;
tmp=it;it--;s[ii].erase(tmp);
}
}
}
dfs(k-1);
}
else if(a[k].c=='S')
{
dfs(k-1);
}
else
{
dfs(Save[a[k].last-1]-1);
}
}
int main()
{
freopen("drawing.in","r",stdin);
freopen("drawing.out","w",stdout);
int i,j;
scanf("%d%d%d\n",&n,&i,&m);
//if(n*n*m<=)
for(i=1;i<=m;i++)
{
scanf("%s",str);
if(str[0]=='P')
{
a[i].c='P';
scanf("%d%d%d%d%d",&a[i].k,&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
a[i].x1++;a[i].x2++;a[i].y1++;a[i].y2++;
}
else if(str[0]=='S')
{
a[i].c='S';
Save.push_back(i);
}
else
{
a[i].c='L';
scanf("%d",&a[i].last);
}
scanf("\n");
}
for(i=1;i<=n;i++)
{
s[i].insert(-1);
for(j=1;j<=n;j++)
{
ans[i][j]=1;
s[i].insert(j);
}
}
dfs(m);
return 0;
}