社区讨论
样例过 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 条回复,欢迎继续交流。
正在加载回复...