专栏文章

T4

个人记录参与者 3已保存评论 4

文章操作

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

当前评论
4 条
当前快照
1 份
快照标识符
@miqc0keo
此快照首次捕获于
2025/12/04 02:19
3 个月前
此快照最后确认于
2025/12/04 02:19
3 个月前
查看原文

给大家分析一下@god_std的T4代码:

他的:
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;char s[1000999],t[1000999]; 
bool cmp(char a,char b){return a>b;}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=m;i++)cin>>t[i];
	char c=t[m];int it=1;bool flag=1;
	sort(t+1,t+m+1,cmp);
	for(int i=1;i<=n;i++)if(it<=m&&s[i]<t[it])s[i]=t[it],it++;
	for(int i=1;i<=n;i++)if(s[i]==c)flag=0;
	if(flag==1)s[n]=c;
	for(int i=1;i<=n;i++)cout<<s[i];
	return 0;
} 
@chenxi2009 的(去注释):
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,it;
char s[2000000],t[2000000],c;
bool u;
int main(){
	scanf("%d%d%s%s",&n,&m,s + 1,t + 1);
	c = t[m];
	sort(t + 1,t + m + 1);
	it = m;
	for(int i = 1;i <= n;i ++) if(it && t[it] > s[i]) s[i] = t[it --];
	for(int i = 1;i <= n;i ++) if(s[i] == c) u = true;
	if(!u) s[n] = c;
	for(int i = 1;i <= n;i ++) printf("%c",s[i]);
	return 0;
}

变量名

s,t,n,m 就不说了,c、it 的赋值都变成了直接赋,名称未改;u 改成了 flag,赋值 true 改成了 0(也就是flag是和题解相反的)。数组少开了几项。

算法

完全一致,就是把整个 t 反了过来,稍微改一下 t[i] 的取值方法。

I/O

scanf/printf 改成了 cin/cout。

其余

定义、赋值的位置全部与题解不同,显然是故意为了让代码看起来和题解不像。且进行了一些不必要的压行,显得代码和题解不同。用了 #define int long long,完全不必要,因为这题数据很小,明显是在掩饰。

总结

抄题解概率 101%,请 god_std尽快作出解释!

评论

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

正在加载评论...