2017河南工业大学校赛 I 小天使改名
来源:互联网 发布:无锡网络开发有限公司 编辑:程序博客网 时间:2024/05/10 01:48
问题 I: 小天使改名
题目描述
小天使的b站帐号被大家发现啦。于是小天使决定改名,将他原有ID中的两个不同位置的字母进行交换。(小天使有可能将两个不同位置的相同字母进行交换,虽然这样做他的ID并没有发生变化)
Lsf知道小天使原来的ID,他想知道某个ID是否可能是小天使的新ID。
输入
第一行为数据组数T(T≤100)。
每组数据的第一行是字符串s1,(2≤length(s1)≤1000),为小天使的原始ID。
第二行是字符串s2,(length(s2)=length(s1)),为Lsf猜测的ID。
s1,s2均只含小写字母。
输出
对每组数据输出一行,如果这个ID可能是小天使的新ID,输出YES,否则输出NO。
样例输入
3chhcaaaaabcabb
样例输出
YESYESNO
解题思路:
这题有两种情况能满足要求,第一种是交换后字符串发生了变化,这种情况下有且仅有两个字母发生变化,并且两个字母只是交换。第二种是交换后字符串不发生变化,这种情况要求两个字符串完全相同,并且字符串中必须至少有两个相同字母(这样才能交换有不变)。
代码:
#include <iostream>#include<bits/stdc++.h>using namespace std;const int N=1100;char s1[N],s2[N];int a[N];int main(){ int T; cin>>T; while(T--) { scanf("%s%s",s1,s2); int n1=strlen(s1); int n2=strlen(s2); if(n1!=n2) { printf("NO\n"); continue; } int flag1=0,flag2=0; for(int i=0;i<n1;i++) for(int j=i+1;j<n1;j++) if(s1[i]==s1[j]) flag1=1; int cnt=0; for(int i=0;i<n1;i++) if(s1[i]!=s2[i]) a[cnt++]=i; if(cnt==0&&flag1) flag2=1; if(cnt==2&&s1[a[0]]==s2[a[1]]&&s1[a[1]]==s2[a[0]]) flag2=1; if(flag2) printf("YES\n"); else printf("NO\n"); }}
0 0
- 2017河南工业大学校赛 I 小天使改名
- 1268: 小天使改名--河南工业大学校赛
- 河南工业“玲珑杯”小天使改名
- 2017河南工业大学校赛 C 魔法宝石
- 2017河南工业大学校赛 D rqy的键盘
- 2017河南工业大学校赛 H ch追妹
- 2017河南工业大学校赛 F Hmz 的女装
- 浙江工业大学校赛 画图游戏
- HAUTOJ 1268: 小天使改名
- HAUTOJ 1268: 小天使改名
- HAUTOJ 1268: 小天使改名
- 小天使改名(模拟)
- hautoj 1268: 小天使改名
- 浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!
- 浙江工业大学校赛 猜猜谁是我
- 浙江工业大学校赛 XiaoWei的战斗力
- 浙江工业大学校赛 小马哥和数列
- 浙江工业大学校赛 小M和天平
- 安卓漫漫路之BitmapFactory高效加载Bitmap.
- ios 类别和类扩展
- WIFI 模块上传服务器显示曲线
- uva10791 唯一分解定理
- 第三讲:index3控制指令.html
- 2017河南工业大学校赛 I 小天使改名
- matlab矩阵
- Parcelable 序列化集合List,数组 Array,布尔值 boolean 先将就看这两篇文章,后期整理
- Android RTMP直播推流方案选择
- c缺陷与陷阱
- k-d tree算法
- 线程和线程池的故事
- python使用opencv将灰度图人脸图片转化为RGB
- Hazelcast介绍