社区讨论

样例过 WA掉

SP15436UCV2013H - Slick参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m0dkmqpn
此快照首次捕获于
2024/08/28 16:05
2 年前
此快照最后确认于
2024/08/28 16:59
2 年前
查看原帖

恳请巨佬帮帮忙

CPP
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<set>
#include<ctime>
#include<stack>
#define N 255
#define int long long
using namespace std;
int n,m;
int cnt;
char a[N][N];
int num[N*N];
int movx[]={0,1,0,0,-1};
int movy[]={0,0,1,-1,0};
int re()
{
	int x=0,p=1;
	char y=getchar();
	for(;y>'9'||y<'0';y=getchar())
		if(y=='-')
			p=-p;
	for(;y>='0'&&y<='9';y=getchar())
		x=x*10+y-'0';
	return x*p;
}
void wr(int x)
{
	if(x<0)
		x=-x,putchar('-');
	if(x>9)
		wr(x/10);
	putchar(x%10+'0');
}
struct node
{
	int area,sum;
}ans[N];
void dfs(int x,int y)
{
	a[x][y]='0';
	for(int i=1;i<=4;i++)
	{
		if(x+movx[i]>0&&x+movx[i]<=n&&y+movy[i]>0&&y+movy[i]<=m&&a[x+movx[i]][y+movy[i]]=='1')
		{
			ans[cnt].area++;
			dfs(x+movx[i],y+movy[i]);
		}
	}
}
bool cmp(node x,node y)
{
	return x.area<y.area;
}
signed main()
{
    while(1)
    {
    	cnt=0;
    	cin>>n>>m;
    	if(n==0&&m==0)
    		return 0;
		for(int i=1;i<=n;i++)
		    for(int j=1;j<=m;j++)
		    	cin>>a[i][j];
		for(int i=1;i<=n;i++)
		    for(int j=1;j<=m;j++)
		    {
		    	if(a[i][j]=='1')
		    	{
		    		++cnt;
		    		ans[cnt].area=1;
		    		dfs(i,j);
				}
			}
		wr(cnt);
		putchar('\n');
		sort(ans+1,ans+cnt+1,cmp);
		for(int i=1;i<=250*250;i++)
			num[i]=1;
		for(int i=2;i<=cnt;i++)
		{
			if(ans[i].area==ans[i-1].area)
				num[ans[i].area]++;
		}
	    for(int i=1;i<=cnt;i++)
	    {
			int ls=i;
			wr(ans[i].area),putchar(' '),wr(num[ans[i].area]),putchar('\n');
			i+=num[ans[ls].area]-1;
	    }
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...