F. Equalizing Two Strings

有几种情况可以直接判定结果:

① 字母对应个数不一样,可直接判NO

② 当不满足①时,如果有一个字母有2个及以上的个数,也可直接判YES

③ 当不满足①②时我们可以知道,此时的字符串最多也只有26个字符,所以可以直接暴力,一个字符串只交换相邻位的字符必然可以变成另一个字符串,而如果交换次数为偶数,则为YES,否则为NO。

其实很多时候E、F题也并没有想象中的那么难,可以尝试尝试,至少赛时把题目看看也好。

代码:

// Created by CAD on 2019/11/7.
#include <bits/stdc++.h>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std; const int maxn=2e5+5;
int cnt1[30],cnt2[30];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int q; cin>>q;
while(q--)
{
int n;
string s,t;
cin>>n>>s>>t;
mst(cnt1,0),mst(cnt2,0);
for(auto i:s)
cnt1[i-'a'+1]++;
for(auto i:t)
cnt2[i-'a'+1]++;
int flag=0;
for(int i=1;i<=26;++i)
if(cnt1[i]!=cnt2[i]) flag=1;
if(flag) {cout<<"NO"<<"\n";continue;}
for(int i=1;i<=26;++i)
if(cnt1[i]>1) flag=1;
if(flag) {cout<<"YES\n";continue;}
int cnt=0;
for(int i=0;i<n;++i)
if(s[i]!=t[i])
{
int x;
for(int j=i+1;j<n;++j)
if(s[j]==t[i])
{
x=j;
break;
}
for(int j=x;j>i;--j)
swap(s[j],s[j-1]),cnt++;
}
if(cnt%2==0) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}

最新文章

  1. WPF 浏览文件夹,获取其路径
  2. Sybase
  3. InnoDB主键设计
  4. POJ_Fibonacci POJ_3070(矩阵快速幂入门题,附上自己写的矩阵模板)
  5. (step6.3.5)hdu 1281(棋盘游戏——二分图的完美匹配)
  6. TCP/IP 网络精讲:开宗明义及第一课
  7. python第七天
  8. SpingBoot+Mybaits+Vue,更新学习
  9. source Insight 添加python 工程
  10. 云笔记项目-Spring事务学习-传播SUPPORTS
  11. 洛谷P2704 炮兵阵地
  12. luogu 1268 树的重量
  13. 数字图像处理的Matlab实现(3)—灰度变换与空间滤波
  14. Codeforces 487E Tourists [广义圆方树,树链剖分,线段树]
  15. 东芝 B-EV4 打印机 串口打印命令
  16. centos7.2 使用rpm安装jdk8
  17. ABP之展现层(Datatables分页)
  18. 在shell终端操作oracle数据库的常用命令
  19. 求助大佬3——hash姿势
  20. PHP个人博客系统开发历程

热门文章

  1. hdu 1281 匈牙利算法
  2. 旋转动画(RotateTransform)
  3. ASP.NET Core中间件实现分布式 Session(转载)
  4. Pattern Recognition and Machine Learning-01-Preface
  5. ELinq学习一
  6. 使用webform、websevice来进行ajax请求操作
  7. Vue.prototype详解
  8. 三台服务器的时间同步-Linux
  9. 批量kill指定名称的进程
  10. Mysql(五):索引原理与慢查询优化