问:为啥输入不了
查看原帖
问:为啥输入不了
583186
2c_s楼主2024/7/6 11:31

rt,有输入模块但是没法读入东西,P2749

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define fi first
#define se second
using namespace std;
signed solution();
signed main(){solution();system("pause");putchar('\n');}
ll read(){
	ll k=0,flag=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}
	while(c>='0'&&c<='9'){k=(k<<1)+(k<<3)+(c^48);c=getchar();}
	return k*flag;
}
void print(ll n){
	if(n<0)putchar(45),n=-n;
	if(n>9)print(n/10);putchar(n%10^48);
}
char readc(){
	char c=getchar();
	while(c=='\n'||c=='\r'||c==' ')c=getchar();
	return c;
}
const int N=110;
int n,m,minx,maxx,miny,maxy,cnt,h,w;
char c[N][N],ch='a',ans[N][N];
bool vis[N][N],flag[N][N];
map<vector<vector<bool>>,char>mp;
void dfs(int x,int y){
	if(x<1||x>n||y<1||y>m||vis[x][y]||c[x][y]=='0')return ;
	vis[x][y]=1;
	flag[x][y]=1;
	minx=min(minx,x);
	maxx=max(maxx,x);
	miny=min(miny,y);
	maxy=max(maxy,y);
	dfs(x+1,y);
	dfs(x-1,y);
	dfs(x,y+1);
	dfs(x,y-1);
	dfs(x+1,y+1);
	dfs(x+1,y-1);
	dfs(x-1,y+1);
	dfs(x-1,y-1);
	return ;
}
void rev(vector<vector<bool>>&g){
	int siz=max(h,w)+10;
	vector<vector<bool>>t(siz,vector<bool>(siz));
	for(int i=1;i<=h;++i){
		for(int j=1;j<=w;++j)t[j][h-i]=g[i][j];
	}
	g=t;
	return ;
}
signed solution(){
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j)cin>>c[i][j];
	}
	memset(ans,'0',sizeof ans);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			if(!vis[i][j]){
				minx=miny=1e9;
				maxx=maxy=0;
				memset(flag,0,sizeof flag);
				dfs(i,j);
				h=maxx-minx+1,w=maxy-miny+1;
				int siz=max(h,w)+10;
				vector<vector<bool>>g(siz,vector<bool>(siz));
				for(int x=minx;x<=maxx;++x){
					for(int y=miny;y<=maxy;++y)g[x-minx+1][y-miny+1]=flag[x][y];
				}
				if(!mp.count(g)){
					mp[g]=ch++;
					for(int i=0;i<4;++i){
						rev(g);
						mp[g]=ch;
					}
					for(int i=1;i<=h;++i)reverse(g[i].begin(),g[i].end());
					// for(int i=1;i<=h;++i){
					// 	for(int j=1;j<=w;++j)cout<<g[i][j];
					// 	putchar('\n');
					// }
					for(int i=0;i<4;++i){
						rev(g);
						mp[g]=ch;
					}
				}
				char t=mp[g];
				for(int x=minx;x<=maxx;++x){
					for(int y=miny;y<=maxy;++y)if(g[x-minx+1][y-miny+1])ans[x][y]=t;
				}
			}
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j)cout<<ans[i][j];
		putchar('\n');
	}
	return 0;
}
2024/7/6 11:31
加载中...