专栏文章

题解:P12005 【MX-X10-T1】[LSOT-4] 如何用中间忘了写一篇排版整齐的题解?

P12005题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minriku2
此快照首次捕获于
2025/12/02 07:10
3 个月前
此快照最后确认于
2025/12/02 07:10
3 个月前
查看原文
可以观察出规则中的英文、数字或公式都是捆绑在一起的。而且,连续的多个空格跟单个空格是等价的。
所以,可以先对这个字符串进行处理,方便后续判断:
  • 把连续的空格只保留一个。
  • 把英文、数字和公式都改成一个一样的字符
  • 还可根据习惯替换掉原来字符
接着相邻的两两判断:是否有出现中文和英文、数字或公式之间没有空格。如果有,输出 No 然后终止程序。
再相邻的三三判断:是否有出现中文标点和英文、数字或公式之间有空格。如果有,输出 No 然后终止程序。
如果都没出现那些情况,输出 Yes

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin>>s;
	string a="";//处理之后的串
	int n=s.size();
	for(int i=0;i<n;i++){
		if(i==0||(!(s[i]=='_'&&s[i-1]=='_'))){
			if(s[i]=='_'){
				a+=' ';
			}
			if(s[i]=='a'||s[i]=='$'||s[i]=='l'){
				a+='0';
			}
			if(s[i]=='@'){
				a+='1';
			}
			if(s[i]==','){
				a+='2';
			}
		}
	}//处理字符串,方便判断
	n=a.size();
	for(int i=1;i<n;i++){//两两判断
		if(a[i]=='1'&&a[i-1]=='0'){
			cout<<"No";
			return 0;
		}
		if(a[i-1]=='1'&&a[i]=='0'){
			cout<<"No";
			return 0;
		}
	}
	for(int i=1;i+1<n;i++){//三三判断
		if(a[i]==' '&&a[i-1]=='0'&&a[i+1]=='2'){
			cout<<"No";
			return 0;
		}
		if(a[i]==' '&&a[i-1]=='2'&&a[i+1]=='0'){
			cout<<"No";
			return 0;
		}
	}
	cout<<"Yes";
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...