WA on #10 求助
查看原帖
WA on #10 求助
277757
hanyuchen2019楼主2020/11/1 15:31

我的方法是贪心,每次求能炸最多的地方。

样例全过,对拍的std有锅,实在调不出来了,求大佬看看!qwq

#include<iostream>
#include<cstdio>
using namespace std;
bool a[20][20];
int n,m;
bool getc()//字符读入 
{
	char a=getchar();
	if(a!='#'&&a!='.')a=getchar();
	if(a=='#')return false;
	if(a=='.')return true;
}
int count(int x,int y)//数能炸多少墙 
{
	int ans=0;
	for(int i=1; i<=n; i++)
	{
		if(a[i][y]==0)ans++;
	}
	for(int i=1; i<=m; i++)
	{
		if(a[x][i]==0)ans++;
	}
	return ans;
}
void bomb(int x,int y)//炸掉 
{
	for(int i=1; i<=n; i++)
	{
		a[i][y]=1;
	}
	for(int i=1; i<=m; i++)
	{
		a[x][i]=1;
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			a[i][j]=getc();
	bool tmp=true;
	int mx=0,maxx=0,maxy=0;
	int p;
	for(p=0; tmp; p++)
	{
		tmp=false,mx=0,maxx=0,maxy=0;
		for(int i=1; i<=n; i++)
			for(int j=1; j<=m; j++)
			{
				if(a[i][j]==1)
				{
					tmp=true;
					int z=count(i,j);
					if(z>mx)mx=z,maxx=i,maxy=j;
					//cout<<"..."<<i<<" "<<j<<":"<<z<<endl;
				}
			}
		if(mx==0)break;//没有墙了
		bomb(maxx,maxy);
		//cout<<maxx<<" "<<maxy<<endl;
	}
	if(tmp)
		cout<<p<<endl;
	else cout<<-1<<endl;
	return 0;
}
2020/11/1 15:31
加载中...