如何解决多层嵌套的复制黏贴后缩进修改问题
  • 板块灌水区
  • 楼主IYSY2009I
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/3/10 22:42
  • 上次更新2023/10/28 06:53:20
查看原帖
如何解决多层嵌套的复制黏贴后缩进修改问题
449457
IYSY2009I楼主2022/3/10 22:42

RT,求好用的方法(不包括压行),顺便贴一下刚才改了 10 分钟缩进和大括号匹配的代码(先不考虑题目、正确性、码风)

#include<iostream>
#include<cstdio>
using namespace std;
int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*f;
}
int a[305];
char mp[305][305];
int full[305];
int cnt;
int main(){
	int n=read(),m=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			mp[i][j]='0';
	for(int i=1;i<=m;i++)
		a[i]=read();
	for(int i=1;i<=m;i++){
		if(a[i]>(n+1)/2){
			printf("No");
			return 0;
		}
		if(a[i]==(n+1)/2){
			if(full[cnt]==i-1&&n%2!=0&&i!=1){
				printf("No");
				return 0;
			}
			cnt++;
			full[cnt]=i;
			if(full[cnt]==i-1&&n%2==0)
				for(int j=2;j<=n;j+=2)
					mp[j][i]='1';
			else
				for(int j=1;j<=n;j+=2)
					mp[j][i]='1';
		}
	}
	if(!cnt){
		for(int j=1;j<=n;j++){
			if(j%2==0)
				for(int k=2;k<=a[j]*2;k+=2)
					mp[k][j]='1';
			else
				for(int k=1;k<=a[j]*2-1;k+=2)
					mp[k][j]='1';
		}
	}
	else{
		for(int i=1;i<=cnt-1;i++){
			if((full[i+1]-full[i]-1)%2==1){
				for(int j=1+full[i];j<=full[i+1]-1;j++){
					if(j%2==0)
						for(int k=2;k<=a[j]*2;k+=2)
							mp[k][j]='1';
					else
						for(int k=1;k<=a[j]*2-1;k+=2)
							mp[k][j]='1';
				}
			}
			if(!(full[i+1]-full[i]-1)%2){
				int flag=0;
				for(int j=full[i]+1;j<full[i+1]-2;j++){
					if(a[j+1]-a[j]<=(n+1)/2){
						flag=j;
						break;
					}
					if(!flag){
						printf("No");
						return 0;
					}
				}
				int cnt=1;
				for(int j=1+full[i];j<=full[i+1]-1;j++){
					if(flag==j){
						if(cnt%2==0){
							for(int k=2;k<=a[j];k+=2)
								mp[k][j]='1';
							j++;
							for(int k=2*a[j-1];k<=(a[j]+a[j-1])*2;k+=2)
								mp[k][j]='1';
						}
						else{
							for(int k=1;k<=a[j]*2;k+=2)
								mp[k][j]='1';
							j++;
							for(int k=2*a[j-1]-1;k<=(a[j]+a[j-1])*2-1;k+=2)
								mp[k][j]='1';
						}
					}
					if(cnt%2==0)
						for(int k=2;k<=a[j];k+=2)
							mp[k][j]='1';
					else
						for(int k=1;k<=a[j];k+=2)
							mp[k][j]='1';
				}
			}
		}
	}
	printf("Yes\n");
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
			printf("%c",mp[i][j]);
		printf("\n");
	}
	return 0;
}
2022/3/10 22:42
加载中...