码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 26C Parquet 构造题

时间:2014-07-03 13:48:14      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:blog   http   os   2014   for   io   

题目链接:点击打开链接

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <set>
using namespace std;
#define N 105
int n,m,a,b,c;
char s[N][N];
set<char>myset;
bool inmap(int x,int y){return 0<=x&&x<n&&0<=y&&y<m;}
int step[4][2] = {0,1,0,-1,1,0,-1,0};
void hehe(int x,int y){
	for(int i = 0; i < 4; i++) {
		int nowx = step[i][0]+x,nowy = step[i][1]+y;
		if(!inmap(nowx,nowy)||!s[nowx][nowy])continue;
		myset.insert(s[nowx][nowy]);
	}
}
char find(int x1,int y1, int x2, int y2){
	myset.clear();
	for(int i = x1; i <= x2; i++)
		for(int j = y1; j <= y2; j++)
			hehe(i,j);
	for(int i = 0; i < 26; i++)
		if(myset.find(i+'a')==myset.end())
			return i+'a';
}
bool work(){
	if((n&1)&&(m&1))return false;
	if(n*m > (2*a+2*b+4*c))return false;
	memset(s, 0, sizeof s);
	int h = 0, l = 0;
	if(n&1) {
		for(int i = 0; i < m; i+=2)
			s[0][i]=s[0][i+1]= find(0,i,0,i+1),a--;
		if(a<0)return false;
		h = 1;
	}
	if(m&1){
		for(int i = 0; i < n; i+=2)
			s[i][0]=s[i+1][0]=find(i,0,i+1,0),b--;
		if(b<0)return false;
		l = 1;
	}
	a-=(a&1);
	b-=(b&1);
	if((n-h)*(m-l)>(2*a+2*b+4*c))return false;
	int i;
	for(i = h; i < n; i+=2) {
		int j = l;
		while(a>=2&&j<m) {
			s[i][j] = s[i][j+1] = find(i,j,i,j+1);
			s[i+1][j] = s[i+1][j+1] = find(i+1,j,i+1,j+1);
			j+=2;
			a-=2;
		}
		while(b>=2&&j<m) {
			s[i][j] = s[i+1][j] = find(i,j,i+1,j);
			s[i][j+1] = s[i+1][j+1] = find(i,j+1,i+1,j+1);
			j+=2;
			b-=2;
		}
		while(c&&j<m) {
			s[i][j] = s[i][j+1] = s[i+1][j] = s[i+1][j+1] = find(i,j,i+1,j+1);
			j+=2;
			c--;
		}
		if(j<m)return false;
	}
	if(i<n)return false;
	return true;
}
int main(){
	while(~scanf("%d %d %d %d %d",&n,&m,&a,&b,&c)){
		bool ans = work();
		if(ans){
			for(int i=0;i<n;i++)puts(s[i]);
		}
		else puts("IMPOSSIBLE");
	}
	return 0;
}

CodeForces 26C Parquet 构造题,布布扣,bubuko.com

CodeForces 26C Parquet 构造题

标签:blog   http   os   2014   for   io   

原文地址:http://blog.csdn.net/qq574857122/article/details/36461153

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!