题目链接:https://atcoder.jp/contests/abc279/tasks/abc279_c
我的代码:
#include<bits\stdc++.h>
using namespace std;
const int N=400005;
int n,m;
char x;
string tempa[N],tempb[N];
string a[N],b[N];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){tempa[i]=" ";tempb[i]=" ";}
for(int i=1;i<=m;i++){a[i]=" ";b[i]=" ";}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf(" %c",&x);
if(x=='#'){tempa[i][j]='1';}
else {tempa[i][j]='0';}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf(" %c",&x);
if(x=='#'){tempb[i][j]='1';}
else {tempb[i][j]='0';}
}
}
printf("-----Step 1-----\n");
for(int i=1;i<=m;i++){
a[i][0]=' ';b[i][0]=' ';
for(int j=1;j<=n;j++){
a[i][j]=tempa[j][i];
b[i][j]=tempb[j][i];
}
printf("i:%d a:%s sa:%d b:%s sb:%d\n",i,a[i].c_str(),a[i].size(),b[i].c_str(),b[i].size());
}
swap(n,m);
sort(a+1,a+n+1);sort(b+1,b+n+1);
printf("-----Step 2-----\n");
for(int i=1;i<=n;i++){
printf("*%s*\n",a[i].c_str());
}
for(int i=1;i<=n;i++){
printf("*%s*\n",b[i].c_str());
}
printf("-----Step 3-----\n");
for(int i=1;i<=n;i++){
int left=1,right=n,flag=0;
while(left<right){
int mid=(left+right)/2;
if(a[i]==b[mid]){
flag=1;
break;
}
if(a[i]<b[mid]){left=mid+1;}
else {right=mid;}
}
if(!flag){
printf("No\n");
return 0;
}
}
printf("Yes\n");
return 0;
}
测试数据:
输入:
3 3
#.#
.#.
#.#
##.
##.
.#.
输出:
No
为什么这段代码
for(int i=1;i<=m;i++){
a[i][0]=' ';b[i][0]=' ';
for(int j=1;j<=n;j++){
a[i][j]=tempa[j][i];
b[i][j]=tempb[j][i];
}
}
所计算的a,b字符串,用
cout<<a[i]<<' '<<b[i]<<'\n';
输出是空,用
printf("%s %s\n",a[i].c_str(),b[i].c_str();
却能输出正确的计算结果? 而且a[i].size和b[i].size()都只有1(a[i][0],b[i][0]用空格占位)