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

ZOJ 3810 A Volcanic Island 构造题

时间:2014-09-09 13:22:28      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:http   os   io   ar   for   sp   on   c   amp   

题目链接:点击打开链接


学弟是厉害啊。。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
int vis[110][110],a[110][110],n;
void fuck1()
{
	for(int ii=1;ii<=n/2;ii++)//7
	{
		int i=n,j=ii;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
	int i=n/2+2,j=n/2+1;
	int num=0;
	while(1)
	{
		a[i][j]=4;
		if(a[i-1][j]==0)
			i--;
		else
			j++;

		num++;
		if(num==n)
			break;
	}
	for(int ii=(n-1)/2+3;ii<=n;ii++)
	{
		int i=n,j=ii-2;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
}
void fuck2()
{
	for(int ii=1;ii<=n/2;ii++)//9
	{
		int i=n,j=ii;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
	int i=n/2+2,j=n/2+1;
	int num=0;
	while(1)
	{
		a[i][j]=4;
		if(a[i-1][j]==0)
			i--;
		else
			j++;
		num++;
		if(num==n)
			break;
	}
	for(int ii=(n-1)/2+3;ii<=n;ii++)
	{
		int i=n,j=ii-2;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
}
void fuck3()
{
	for(int ii=1;ii<=n/2;ii++)//10
	{
		int i=n,j=ii;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
	int i=n/2+2,j=n/2+1;
	int num=0;
	while(1)
	{
		a[i][j]=4;
		if(a[i-1][j]==0)
			i--;
		else
			j++;

		num++;
		if(num==n)
			break;
	}
	for(int ii=n/2+3;ii<=n;ii++)
	{
		int i=n,j=ii-2;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
}
void fuck4()
{
	for(int ii=1;ii<=n/2;ii++)//8
	{
		int i=n,j=ii;
		int num=0;
		while(1)
		{
			if(ii%2==1)
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}
	int i=n/2+2,j=n/2+1;
	int num=0;
	while(1)
	{
		a[i][j]=4;
		if(a[i-1][j]==0)
			i--;
		else
			j++;
		num++;
		if(num==n)
			break;
	}
	for(int ii=n/2+3;ii<=n;ii++)
	{
		int i=n,j=ii-2;
		int num=0;
		while(1)
		{
			if(ii%2==0)
			{
				a[i][j]=3;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			else
			{
				a[i][j]=2;
				if(a[i-1][j]==0)
					i--;
				else
					j++;
			}
			num++;
			if(num==n)
				break;
		}
	}

}
int main ()
{
	int t;
	while(scanf("%d",&t)!=EOF)
	{
		while(t--)
		{
			memset(a,0,sizeof(a));
			scanf("%d",&n);
			if(n==1)
				printf("Y\n");
			else if(n==2||n==3||n==4)
				printf("No solution!\n");
			else if(n==6)
			{
				printf("YYYYYY\n");
				printf("RRBBBB\n");
				printf("YRRRRB\n");
				printf("YYBBGB\n");
				printf("YYBBGG\n");
				printf("YBBGGG\n");
			}
			else
			{
				memset(a,0,sizeof(a));
				for(int i=1;i<=n;i++)
					a[1][i]=1;
				if(n%2==1)//奇数
				{
					if((n/2)%2==1)//7
						fuck1();
					else//9
						fuck2();
				}
				else
				{
					if((n/2)%2==1)//10
						fuck3();
					else//8
						fuck4();
				}
				for(int i=1;i<=n;i++)
				{
					for(int j=1;j<=n;j++)
					{
						//printf("%d",a[i][j]);
						if(a[i][j]==1)
							printf("Y");
						else if(a[i][j]==2)
							printf("G");
						else if(a[i][j]==3)
							printf("R");
						else if(a[i][j]==4)
							printf("B");
					}
					printf("\n");
				}
			}
		}
	}
	return 0;
}


ZOJ 3810 A Volcanic Island 构造题

标签:http   os   io   ar   for   sp   on   c   amp   

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

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