T4
LittleI_qwq · · 个人记录
给大家分析一下@god_std的T4代码:
他的:
#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 的(去注释):
#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 尽快作出解释!