题目链接:http://codeforces.com/contest/989/problem/C
题意就是花园里有A,B,C,Ds四种颜色的花,如果同一种颜色的两种花可以通过同一种颜色的花上下左右四个方向到达,那么这算一条路,给你a,b,c,d四种颜色的花的路径数量,叫你输出解决方案。
构造题果然只有有脑子的人才做得出来,自己写判断了好多情况,写了上百行,感觉不对,去看了别人的题解才发现是这样子的。。
因为最大值只有100,所以12*12的格子肯定能装得下,那么只需要把它分成4块,然后在块里放与这一块不同颜色的花就好了
#include<bits/stdc++.h>
using namespace std;
char Map[105][105];
void fil(int x,int y,int ey,int num,char c)
{
int p1=x,p2=y;
while(num)
{
Map[p1][p2]=c;
if(p2+2>=ey)
p1+=2,p2=y;
else
p2+=2;
num--;
}
}
int main()
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
for(int i=1;i<=50;i++)
{
for(int j=1;j<=50;j++)
{
if(i<=25&&j<=25)
Map[i][j]='A';
else if(i<=50&&j<=25)
Map[i][j]='B';
else if(i<=25&&j<=50)
Map[i][j]='C';
else
Map[i][j]='D';
}
}
fil(1,1,25,b-1,'B');
fil(26,1,25,c-1,'C');
fil(1,26,50,d-1,'D');
fil(26,26,50,a-1,'A');
printf("50 50\n");
for(int i=1;i<=50;i++)
{
for(int j=1;j<=50;j++)
printf("%c",Map[i][j]);
printf("\n");
}
return 0;
}