这题不知道个人感觉这个方法来实现应该没有问题,但是不知道为什么就是wa,应该是什么情况没有考虑,找不到...有找到的希望看看
我是先把每个人希望分到的大小按照从大到小排列,
然后再从第一个格到最后一个搜索是否有空,
如果有就检测有四个角有没有空
如果有空就填充格
如果都找不到空就输出找到失败,
如果吧全部的输入都填充了格子,
然后计算全部填充的是否达到不浪费
总体是这样,但是就不知道为什么不行,测试例子通过,但是提交wa
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
char cake[17][17];
int main()
{
int icase;
cin>>icase;
priority_queue<int> que;
while(icase--)
{
int sum=0;
while(!que.empty())
que.pop();
memset(cake,' ',sizeof(cake));
int size,peo,temp;
cin>>size>>peo;
while(peo--)
{
cin>>temp;
sum+=temp*temp;
que.push(temp);
}
bool fl=true;
while(!que.empty())
{
bool flag=false;
temp=que.top();
que.pop();
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
if(cake[i][j]==' '&&cake[i+temp-1][j+temp-1]==' '&&
cake[i][j+temp-1]==' '&&cake[i+temp-1][j]==' '&&
j+temp-1<=size&&i+temp-1<=size)
{
for(int z=0;z<temp;z++)
for(int x=0;x<temp;x++)
cake[i+z][j+x]='#';
flag=true;
break;
}
if(flag)
break;
}
if(!flag)
{
fl=false;
cout<<"HUTUTU!"<<endl;
break;
}
}
if(fl)
{
if(sum==size*size)
cout<<"KHOOOOB!"<<endl;
else
cout<<"HUTUTU!"<<endl;
}
}
return 0;
}