正解:构造
解题报告:
先放传送门yep!
然后构造题我就都直接港正解了QwQ没什么可扯的QwQ
这题的话,首先这么想吼
如果我现在构造的是个4*4的
举个栗子
AABB
ACBB
AADB
DBCA
显然我可以让它变成5*5的
就这样
AABBB
ACBBB
AADBB
DBCAA
DBCAA
也显然能让它再变成6*6的
AABBBB
ACBBBB
AADBBB
DBCAAA
DBCAAA
DBCAAA
好滴那这个时候就应该已经有点get到了484!
就是说,如果我能用小于50*50的构造出来的,我一定就能用50*50构出来
那那那那就不用白不用嘛×
所以就先构个50*50的格子呗
初始化就先平均分掉,就每个字母占25*25
然后以A为例
我每需要一个A,就往全是B的那个块儿丢一个A
然后就完成辽,,,
是不是听起来很简单的样子,,,
我也jio得很简单的样子,,,
但是我就是WA了,,,而且我用它告诉我我错了的数据测我也没测出来我WA在哪儿,,,就很难受,,,,哭了,,,,
不管不管先放个代码QAQ
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i)
int a,b,c,d,h,l;
char ch[60][60];
inline ll read()
{
char ch=getchar();ll x=0;bool y=1;
while(ch!='-' && (ch>'9' || ch<'0'))ch=getchar();
if(ch=='-')ch=getchar(),y=0;
while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
return y?x:-x;
}
int main()
{
a=read()-1;b=read()-1;c=read()-1;d=read()-1;
printf("50 50\n");
rp(i,1,25)
rp(j,1,25)ch[i][j]='A';
rp(i,1,25)
rp(j,26,50)ch[i][j]='B';
rp(i,26,50)
rp(j,1,25)ch[i][j]='C';
rp(i,26,50)
rp(j,26,50)ch[i][j]='D';
h=1;l=0;
while(b--)
{
l+=2;if(l>25)l=2,++h;
ch[h][l]='B';
}
h=1;l=24;
while(c--)
{
l+=2;if(l>50)l=26,++h;
ch[h][l]='C';
}
h=26;l=0;
while(d--)
{
l+=2;if(l>25)l=2,++h;
ch[h][l]='D';
}
h=26;l=24;
while(a--)
{
l+=2;if(l>50)l=26,++h;
ch[h][l]='A';
}
rp(i,1,50)
{
rp(j,1,50)printf("%c",ch[i][j]);
printf("\n");
}
return 0;
}
等我调出来了再回来repo哪儿出问题了QAQ