停了几天了,今天收到教练的警告,麻溜回来写训练日记了 :(
今晚做了训练题,题没做对但学到了东西。。。
F题写了好久终于完了,结果发现不严谨,排序后顺序对应但是会改掉不该改的,
但是排序方法真的是学到了,
下面是学长传授的排序法:
#include<cstring>
#include<algorithm>
using namespace std;
int ans;
struct point{
char fun[5];
long long len;
operator <(const point &b)const{
long long i;
if (len!=b.len)return len<b.len;
int flag1=-1;
for (i=0;i<len;i++){
if (fun[i]=='S'){
flag1=1;
}
else if (fun[i]=='L'){
flag1=2;
}
else flag1=3;
}
int flag2=-1;
for (i=0;i<len;i++){
if (b.fun[i]=='S'){
flag2=1;
}
else if (fun[i]=='L'){
flag1=2;
}
else flag1=3;
}
return flag1<flag2;
}
}a[110],b[110];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].fun;
a[i].len=strlen(a[i].fun);
}
sort (a+1,a+n+1);
for(int i=1;i<=n;i++){
cin>>b[i].fun;
b[i].len=strlen(b[i].fun);
}
sort (b+1,b+n+1);
/* for (int i=1;i<=n;i++){
cout<<a[i].fun<<' ';
}
cout<<endl;
for (int i=1;i<=n;i++){
cout<<b[i].fun<<' ';
}
cout<<endl;*/
for(int i=1;i<=n;i++){
if(a[i].len!=b[i].len){cout<<0<<endl;return 0;}
}
for(int i=1;i<=n;i++)
if(strcmp(a[i].fun,b[i].fun)!=0)ans++;
cout<<ans<<endl;
return 0;
}
上面代码只能解决“仅允许改动一个字母”,对长度相等但是那啥的不能改。。。