1 条题解

  • 0
    @ 2025-8-24 21:16:49

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 未来姚班zyl
    欢迎加入粉丝团!https://www.luogu.com.cn/team/72518|AFO

    搬运于2025-08-24 21:16:49,当前版本为作者最后更新于2024-11-18 15:21:47,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    本题考察内容非常广,涵盖顺序、分支、循环结构,以及字符数组、变量的使用等,考察选手的综合运用能力。

    首先是激战环节:

    对于每一行,设 A 的数量为 cAcA,B 的数量为 cBcB

    • 有城墙

    则这一行的前 cAcA 个字符变为 A,后 cBcB 个字符变为 BH 的位置不变,剩下的变为 #

    • 没有城墙

    则按照题意模拟,如果 cA=cBcA=cB,则这一行全部变为 #,否则,若 cA>cBcA>cB,则右边的 cAcA 个变为 A,剩下的变为 #。若 cA<cBcA<cB,则左边的 cBcB 个变为 B,剩下的变为 #

    然后得到了激战后的局面,接下来是输出阶段。

    • si,j=s_{i,j}= # 或者 H

    则直接输出即可。

    • si,j=s_{i,j}= A 或者 B

    则需判断 si1,js_{i-1,j}si+1,js_{i+1,j} 中是否存在与 si,js_{i,j} 相等的,如果存在,则输出 #,否则直接输出 si,js_{i,j} 即可。

    注意每行输出后要换行。

    这题码量在入门赛中较大,也有实现细节。代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    char c[1005][1005];
    int n,m;
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>c[i][j];
    	for(int i=1;i<=n;i++){
    		int ca=0,cb=0,ch=0;
    		for(int j=1;j<=m;j++){
    			if(c[i][j]=='A')ca++;
    			else if(c[i][j]=='B')cb++;
    			else if(c[i][j]=='H')ch++;
    		}
    		if(ch){
    			for(int j=1;j<=m;j++)if(c[i][j]!='H')c[i][j]='#';
    			for(int j=1;j<=ca;j++)c[i][j]='A';
    			for(int j=m-cb+1;j<=m;j++)c[i][j]='B';
    		}else {
    			if(ca==cb)for(int j=1;j<=m;j++)c[i][j]='#';
    			else if(ca>cb){
    				for(int j=1;j<=m;j++)c[i][j]='#';
    				for(int j=m-ca+1;j<=m;j++)c[i][j]='A';
    			}else {
    				for(int j=1;j<=m;j++)c[i][j]='#';
    				for(int j=1;j<=cb;j++)c[i][j]='B';
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			if(c[i][j]=='#'||c[i][j]=='H')cout<<c[i][j];
    			else {
    				bool fl=0;
    				if(i>1)fl|=c[i-1][j]==c[i][j];
    				if(i<n)fl|=c[i+1][j]==c[i][j];
    				if(fl)cout<<"#";
    				else cout<<c[i][j];
    			}
    		}
    		cout <<'\n';
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    10830
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者