D. Two Strings Swaps(分类)
发布日期:2021-06-30 10:17:46 浏览次数:2 分类:技术文章

本文共 884 字,大约阅读时间需要 2 分钟。

交换的条件是很苛刻的

只允许a的对称字母换,b的对称字母换,a和b的对应位置换

那 么 a i 、 a n − i + 1 、 b i 、 b n − i + 1 是 一 个 整 体 那么a_i、a_{n-i+1}、b_i、b_{n-i+1}是一个整体 aiani+1bibni+1

其 他 位 置 的 字 母 不 会 换 到 这 个 集 合 中 来 , 这 个 集 合 却 可 以 彼 此 交 换 其他位置的字母不会换到这个集合中来,这个集合却可以彼此交换 ,

到 了 这 里 确 实 非 常 简 单 了 , 但 是 别 以 为 已 经 做 完 了 ! ! \color{Red}到了这里确实非常简单了,但是别以为已经做完了!! ,!!

如何正确的考虑这个集合要修改的次数也是个问题

#include 
using namespace std;const int maxn=2e5+10;int n,ans;char a[maxn],b[maxn];int main(){ cin >> n >> (a+1) >> (b+1); for(int i=1;i<=n/2;i++) { char q=min(a[i],a[n-i+1]),w=max(a[i],a[n-i+1]); char sq=min(b[i],b[n-i+1]),sw=max(b[i],b[n-i+1]); if(sq==q&&sw==w) continue; else if(q==w&&sw==sq) continue;//以上是完全相同的情况 else if(sq==q||sq==w||sw==q||sw==w) ans++;//有1个相同 else if(sq==sw) ans++;//只需要换a的1个字母 else ans+=2; } if( n%2==1 && a[n/2+1]!=b[n/2+1] ) ans++; cout<

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107082360 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C. Covered Points Count(线段覆盖,差分)
下一篇:Codeforces Round #654 (Div. 2)(A-D看不懂请来打我)

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月28日 20时29分14秒