题意:给定两个长度均为n且由小写字母组成的字符串,可以进行若干次操作,每次从两个串中分别选一个长度相等的子串进行翻转,问是否存在能使两串相等的一系列操作方案

n<=2e5

思路:首先如果每种字母的个数不相同显然NO

如果有某种字母出现超过两次显然YES,只要将两个字母移动到一起之后反复选择他便能无限次的无限制选择另一个串中长度为2的串进行交换,相当于冒泡排序

对于剩余情况考虑逆序对的奇偶性,每一个长度超过2的操作都能表示为一系列长度=2的操作的集合

冒泡排序每次能消除一个逆序对,如果两者逆序奇偶性相同只要小的那个在冒泡排序完成之后不断浪费次数即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef long double ld;
  7. typedef pair<int,int> PII;
  8. typedef pair<ll,ll> Pll;
  9. typedef vector<int> VI;
  10. typedef vector<PII> VII;
  11. typedef pair<ll,ll>P;
  12. #define N 200010
  13. #define M 1000000
  14. #define INF 1e9
  15. #define fi first
  16. #define se second
  17. #define MP make_pair
  18. #define pb push_back
  19. #define pi acos(-1)
  20. #define mem(a,b) memset(a,b,sizeof(a))
  21. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  22. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  23. #define lowbit(x) x&(-x)
  24. #define Rand (rand()*(1<<16)+rand())
  25. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  26. #define ls p<<1
  27. #define rs p<<1|1
  28. #define fors(i) for(auto i:e[x]) if(i!=p)
  29.  
  30. const int MOD=1e9+,inv2=(MOD+)/;
  31. double eps=1e-;
  32. int dx[]={-,,,};
  33. int dy[]={,,-,};
  34.  
  35. char a[N],b[N];
  36. int s1[N],s2[N];
  37.  
  38. int read()
  39. {
  40. int v=,f=;
  41. char c=getchar();
  42. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  43. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  44. return v*f;
  45. }
  46.  
  47. ll readll()
  48. {
  49. ll v=,f=;
  50. char c=getchar();
  51. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  52. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  53. return v*f;
  54. }
  55.  
  56. int main()
  57. {
  58. int cas=read();
  59. while(cas--)
  60. {
  61. int n=read();
  62. rep(i,,) s1[i]=s2[i]=;
  63. scanf("%s",a+);
  64. scanf("%s",b+);
  65. rep(i,,n)
  66. {
  67. s1[a[i]-'a']++;
  68. s2[b[i]-'a']++;
  69. }
  70. int flag=;
  71. rep(i,,)
  72. if(s1[i]!=s2[i]){flag=; break;}
  73. if(!flag)
  74. {
  75. printf("NO\n");
  76. continue;
  77. }
  78. flag=;
  79. rep(i,,)
  80. if(s1[i]>=){flag=; break;}
  81. if(flag)
  82. {
  83. printf("YES\n");
  84. continue;
  85. }
  86. int t1=,t2=;
  87. rep(i,,) s1[i]=s2[i]=;
  88. rep(i,,n)
  89. {
  90. int x=a[i]-'a',y=b[i]-'a';
  91. rep(j,x+,) t1=(t1+s1[j])%;
  92. rep(j,y+,) t2=(t2+s2[j])%;
  93. s1[x]++; s2[y]++;
  94. }
  95. if(t1==t2) printf("YES\n");
  96. else printf("NO\n");
  97. }
  98. return ;
  99. }

【CF1256F】Equalizing Two Strings(逆序对)的更多相关文章

  1. Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 构造

    F. Equalizing Two Strings You are given two strings s and t both of length n and both consisting of ...

  2. 【CF598 Div3 F】Equalizing Two Strings

    一道通篇结论的傻逼题,被 lh 随手秒了 别告诉我你不会 Div3 的题,你肯定在 fake 没看过题解,以下做法纯属口胡,应该没问题 Description https://www.luogu.or ...

  3. 【CQOI2011】动态逆序对 BZOJ3295

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  4. CH Round #72 奇数码问题[逆序对 观察]

    描述 你一定玩过八数码游戏,它实际上是在一个3*3的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这3*3的网格中. 例如:5 2 81 3 _4 6 7 在游戏过程中,可以把空格与其上 ...

  5. POJ3928Ping pong[树状数组 仿逆序对]

    Ping pong Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3109   Accepted: 1148 Descrip ...

  6. NOIP2013火柴排队[逆序对]

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  7. bzoj 3295 动态逆序对 CDQ分支

    容易看出ans[i]=ans[i-1]-q[i],q[i]为删去第i个数减少的逆序对. 先用树状数组算出最开始的逆序对,预处理出每个数前边比它大的和后边比它小的,就求出了q[i]的初始值. 设b[i] ...

  8. 诸城模拟赛 dvd的逆序对

    [题目描述] dvd是一个爱序列的孩子. 他对序列的热爱以至于他每天都在和序列度过 但是有一个问题他却一直没能解决 给你n,k求1~n有多少排列有恰好k个逆序对 [输入格式] 一行两个整数n,k [输 ...

  9. 归并求逆序数(逆序对数) && 线段树求逆序数

    Brainman Time Limit: 1000 MS Memory Limit: 30000 KB 64-bit integer IO format: %I64d , %I64u   Java c ...

随机推荐

  1. Android - Retrofit 2.0 使用教程(含实例讲解)

    链接:https://blog.csdn.net/carson_ho/article/details/73732076

  2. 学了一天的golang从入门到放弃

    Google的go就是个二货,不实用,它最多只能和c比简单.low!

  3. vue+egg.js+mysql一个前后端分离留言板项目

    一.前序 我相信每个人前端搬运工和我想法都是一样的,都有一个做全栈的梦,无奈面对众多的后台语言,却不从下手,今天由我来带你们潜入全栈的门槛,注意是门槛.能不能学的会后面的内容全靠坚持了. 我今天主要做 ...

  4. SpringMVC访问映射的jsp文件时,报404错误

    配置文件中需要配置映射自然不必多说 <bean class="org.springframework.web.servlet.view.InternalResourceViewReso ...

  5. JProfiler> ERROR: Invalid license key. Aborting.

    用IDEA+Tomcat的方式打开JProfiler,出现错误 1,Event Log 出错 16:10 Application Server was not connected before run ...

  6. K8S工作原理

    kubernetes(k8s)是docker容器用来编排和管理的工具 我们通过kubectl向k8s Master发出指令.kubernetes Master主要是提供API Server.Sched ...

  7. jquery做一个小的轮播插件---有BUG,后续修改

    //首页无缝轮播 ; (function($, window, document, undefined) { $.fn.slider = function(options) { var default ...

  8. 剑指offer-链表中环的入口结点-链表-python ***

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路 第一步,用两个快慢指针找环中相汇点.分别用slow, fast指向链表头部,slow每次走一步,fast每次 ...

  9. 攻防世界--CGfsb238

    测试文件:https://adworld.xctf.org.cn/media/task/attachments/5982010c172744c8a1c93c24b5200b21 1.格式化字符串漏洞 ...

  10. 理解 OutOfMemoryError 异常

    OutOfMemoryError 异常应该可以算得上是一个非常棘手的问题.JAVA 的程序员不用像苦逼的 C 语言程序员手动地管理内存,JVM 帮助他们分配内存,释放内存.但是当遇到内存相关的问题,就 ...