社区讨论
关于memcpy、sizeof使用求助
P9868[NOIP2023] 词典参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @miiizaqn
- 此快照首次捕获于
- 2025/11/28 15:12 3 个月前
- 此快照最后确认于
- 2025/11/29 14:55 3 个月前
AC code
CPP#include<bits/stdc++.h>
using namespace std;
const int N=3010;
int n,m;
char s1[N][N],s2[N][N];
bool cmp(int u,int v){
for(int i=1;i<=m;i++){
if(s1[u][i]!=s2[v][i])return s1[u][i]<s2[v][i];
}
return false;
}
bitset<N>b;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",s1[i]+1);
sort(s1[i]+1,s1[i]+1+m);
memcpy(s2[i]+1,s1[i]+1,m);//没错就是这里
reverse(s2[i]+1,s2[i]+1+m);
}
for(int i=1;i<=n;i++){
b[i]=1;
for(int j=1;j<=n;j++){
if(i==j)continue;
if(!cmp(i,j)){
b[i]=0;
break;
}
}
}
for(int i=1;i<=n;i++){
if(b[i])putchar('1');
else putchar('0');
}
putchar('\n');
return 0;
}
WA code
CPP#include<bits/stdc++.h>
using namespace std;
const int N=3010;
int n,m;
char s1[N][N],s2[N][N];
bool cmp(int u,int v){
for(int i=1;i<=m;i++){
if(s1[u][i]!=s2[v][i])return s1[u][i]<s2[v][i];
}
return false;
}
bitset<N>b;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",s1[i]+1);
sort(s1[i]+1,s1[i]+1+m);
memcpy(s2[i]+1,s1[i]+1,sizeof (s1[i]+1));//没错就是这里
reverse(s2[i]+1,s2[i]+1+m);
}
for(int i=1;i<=n;i++){
b[i]=1;
for(int j=1;j<=n;j++){
if(i==j)continue;
if(!cmp(i,j)){
b[i]=0;
break;
}
}
}
for(int i=1;i<=n;i++){
if(b[i])putchar('1');
else putchar('0');
}
putchar('\n');
return 0;
}
这两份代码有且只有我注释标出来的memcpy里的第三个参赛不同,语义在我看来都是一样的但是不知道为什么结果不同(WA代码有70pts,我将错误数据下回来后发现执行了memcpy后s2数组没有变,但是我用别的数据s2数组是会变的)
万思不得其解求巨佬解答
回复
共 6 条回复,欢迎继续交流。
正在加载回复...