2016年 河南工业大学校赛 I 题.小天使改名
2017-11-22 22:57
197 查看
小天使改名
时间限制: 2 秒 内存限制: 128 MB | 提交: 496 解决: 136题目描述
小天使的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。样例输入
3 ch hc aa aa abc abb
样例输出
YES YES NO 思路:两种情况 <1> 存在 相同字母交换位置 (字符串中必须存在两个和以上的相同字母), <2>两个不同字母交换位置
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std ; #define maxn 2000 char s1[maxn] , s2[maxn] ; int pos1 , pos2 ; int visit[26] ; int main() { int t ; scanf("%d" , &t) ; while(t--) { scanf("%s %s" , s1 , s2 ) ; memset(visit , 0 , sizeof(visit)) ; int len = strlen(s1) ; int num= 0 ; for(int i=0 ; i<len ; i++) { visit[s1[i]-'a'] ++ ; if(s1[i] != s2[i]) { num ++ ; if(num == 1 ){ pos1 = i ; } else if(num == 2 ){ pos2 = i ; } else if(num > 2) { break ; } } } // 检查 一个 串中 是否可能出现相同字母 交换的情况 bool flag = false ; for(int i=0 ; i<26 ; i++){ if(visit[i]>=2){ flag = true ; } } //相同字母交换位置 和 不同字母交换位置两种情况 if((num == 0 && flag == true) ||(num == 2 && s1[pos1] == s2[pos2] && s1[pos2] == s2[pos1])){ printf("YES\n") ; } else { printf("NO\n") ; } } return 0 ; }
相关文章推荐
- 1268: 小天使改名--河南工业大学校赛
- 2017河南工业大学校赛 I 小天使改名
- 2016年 河南工业大学校赛 C题.魔法宝石
- 2016年 河南工业大学校赛 D题.rqy的键盘
- 2016年 河南工业大学校赛 G题.最大字段和
- 2016年 河南工业大学校赛 J 题.爱看电视的LsF
- 2016年 河南工业大学校赛 A题.饶学妹的比赛
- 2016年 河南工业大学校赛 H题.ch追妹
- HAUT 1262 魔法宝石(spfa)(河南工业大学2017校赛)
- HAUT 1261 地狱飞龙(数值积分)(河南工业大学2017校赛)
- HAUT 1266 最大子段和(类似DP)(河南工业大学2017校赛)
- 2017河南工业大学校赛 H ch追妹
- hautoj 1268: 小天使改名
- HAUT 1262 魔法宝石(spfa)(河南工业大学2017校赛)
- HAUT 1261 地狱飞龙(数值积分)(河南工业大学2017校赛)
- HAUT 1266 最大子段和(类似DP)(河南工业大学2017校赛)
- 河南工业“玲珑杯”小天使改名
- 2016年安大校赛(补题)
- HAUT 1262 魔法宝石(spfa)(河南工业大学2017校赛)
- HAUT 1261 地狱飞龙(数值积分)(河南工业大学2017校赛)