Error Correct System(模拟)
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Description
Ford Prefect got a job as a web developer for a small company that makes towels. His current work task is to create a search engine for the website of the company. During the development process, he needs to write a subroutine for comparing strings S and T of equal length to be "similar". After a brief search on the Internet, he learned about the Hamming distance between two strings S and T of the same length, which is defined as the number of positions in which S and T have different characters. For example, the Hamming distance between words "permanent" and "pergament" is two, as these words differ in the fourth and sixth letters.
Moreover, as he was searching for information, he also noticed that modern search engines have powerful mechanisms to correct errors in the request to improve the quality of search. Ford doesn't know much about human beings, so he assumed that the most common mistake in a request is swapping two arbitrary letters of the string (not necessarily adjacent). Now he wants to write a function that determines which two letters should be swapped in string S, so that the Hamming distance between a new string S and string T would be as small as possible, or otherwise, determine that such a replacement cannot reduce the distance between the strings.
Help him do this!
Input
The first line contains integer n (1 ≤ n ≤ 200 000) — the length of strings S and T.
The second line contains string S.
The third line contains string T.
Each of the lines only contains lowercase Latin letters.
Output
In the first line, print number x — the minimum possible Hamming distance between strings S and T if you swap at most one pair of letters in S.
In the second line, either print the indexes i and j (1 ≤ i, j ≤ n, i ≠ j), if reaching the minimum possible distance is possible by swapping letters on positions i and j, or print "-1 -1", if it is not necessary to swap characters.
If there are multiple possible answers, print any of them.
Sample Input
9 pergament permanent
1 4 6
6 wookie cookie
1 -1 -1
4 petr egor
2 1 2
6 double bundle
2 4 1
Hint
In the second test it is acceptable to print i = 2, j = 3.
题解:
给两个串,可以交换一次,问不相同字母的对数;模拟,vis1,vis2存储不匹配字母个数;num1,num2存储对应的下标;
对于每个不匹配的字母;在另一个串中找判断对应是否相同;
代码:
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<map>
using namespace std;
typedef long long LL;
const int MAXN = ;
char s1[MAXN], s2[MAXN];
int vis1[], vis2[];
int num1[][MAXN], num2[][MAXN];
map<int, int>mp;
int main(){
int N;
while(~scanf("%d", &N)){
scanf("%s%s", s1 + , s2 + );
int num = ;
memset(vis1, , sizeof(vis1));
memset(vis2, , sizeof(vis2));
memset(num1, , sizeof(num1));
memset(num2, , sizeof(num2));
for(int i = ; i <= N; i++){
if(s1[i] != s2[i]){
vis1[s1[i] - 'a']++;
num1[s1[i] - 'a'][vis1[s1[i] - 'a']] = i;
vis2[s2[i] - 'a']++;
num2[s2[i] - 'a'][vis2[s2[i] - 'a']] = i;
num++;
}
}
int ans = , pos, flot = , l = , r = ;
for(int i = ; i < ; i++){
if(vis1[i]){
if(vis2[i]){
mp.clear();
for(int j = ; j <= vis2[i]; j++){
pos = num2[i][j];
mp[s1[pos] - 'a'] = pos;
l = pos;r = num1[i][];
}
for(int j = ; j <= vis1[i]; j++){
pos = num1[i][j];
if(mp.count(s2[pos] - 'a')){
l = pos; r = mp[s2[pos] - 'a'];
ans = max(ans, );
flot = ;
break;
}
}
if(flot)break; ans = max(ans, );
}
}
}
if(ans == )
for(int i = ; i < ; i++){
if(vis2[i]){
if(vis1[i]){
mp.clear();
for(int j = ; j <= vis1[i]; j++){
pos = num1[i][j];
mp[s1[pos] - 'a'] = pos;
l = pos;r = num2[i][];
}
for(int j = ; j <= vis2[i]; j++){
pos = num2[i][j];
if(mp.count(s1[pos] - 'a')){
l = pos; r = mp[s1[pos] - 'a'];
ans = max(ans, );
flot = ;
break;
}
}
if(flot)break; ans = max(ans, );
}
}
} printf("%d\n", num - ans);
if(l == && r == )puts("-1 -1");
else printf("%d %d\n", l, r);
}
return ;
}
Error Correct System(模拟)的更多相关文章
- CodeForces 527B Error Correct System
Error Correct System Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...
- CF Error Correct System
Error Correct System time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #296 (Div. 2) B. Error Correct System
B. Error Correct System time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- B. Error Correct System (CF Round #296 (Div. 2))
B. Error Correct System time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Error Correct System CodeForces - 527B
Ford Prefect got a job as a web developer for a small company that makes towels. His current work ta ...
- Codeforces Round #296 (Div. 2B. Error Correct System
Ford Prefect got a job as a web developer for a small company that makes towels. His current work ta ...
- 字符串处理 Codeforces Round #296 (Div. 2) B. Error Correct System
题目传送门 /* 无算法 三种可能:1.交换一对后正好都相同,此时-2 2.上面的情况不可能,交换一对后只有一个相同,此时-1 3.以上都不符合,则不交换,-1 -1 */ #include < ...
- codeforce Error Correct System
题目大意: 给出两串n(1 ≤ n ≤ 200 000)个字母的字符串, 求出最多交换一对数, 使得不相同对数变少,求出不相同的对数以及交换的数的位置,若不需交换则输出-1,-1. 分析: 用矩阵记录 ...
- 【codeforces 527B】Error Correct System
[题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...
随机推荐
- python3-day1(文件操作)
index: str.fomat() open file str.replace 一.新款str.fomat() 1.>>> '12'.zfill(5) '00012' 2.> ...
- iOS程序员对算法的要求
算法和数据结构(鉴于二者的关联,以下统称算法),对于程序员的重要性一直是个具有争议性的话题.有一些程序员内心对算法有着天然的排斥,面试当中一旦考察算法知识,会被不少程序员吐槽,但有部分公司又一直在坚持 ...
- 学习Android之SharedPreferences使用
效果图例如以下: 当我们想让自己的属性设置保存下来,这时就须要SharedPreferences. 上面这个小程序,音乐状态是保存下来的.使用的上一次退出的状态. 进入DDMS,data文件下的dat ...
- hadoop多文件输出
现实环境中,经常遇到一个问题就是想使用多个Reduce,可是迫于setup和cleanup在每个Reduce中会调用一次,仅仅能设置一个Reduce,无法是实现负载均衡. 问题,假设要在reduce中 ...
- 获取对象类型(swift)
获取对象类型(swift) by 伍雪颖 let date = NSDate() let name = date.dynamicType println(name) let string = &quo ...
- Qt使用异或进行加密解密
在加密,解密中,异或运算应该时比较简单的一种.下面的代码,采用异或运算进行加密,解密: 点击(此处)折叠或打开 #include <QtCore/QCoreApplication&g ...
- linux ssh-keygen
用ssh client 客户端 远程登录服务器,避免每次都得输入密码: 解决方法: ssh-keygen 复制 id_rsa.pub 中的内容 到 远程连接的服务器的~/.ssh/authorize ...
- HTTP协议3之压缩--转
HTTP内容编码和HTTP压缩的区别 HTTP压缩,在HTTP协议中,其实是内容编码的一种. 在http协议中,可以对内容(也就是body部分)进行编码, 可以采用gzip这样的编码. 从而达到压缩的 ...
- EF搭建可扩展菜单
EF实现可扩展性菜单 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...
- javascript 阻止事件冒泡和阻止默认事件对比
公司项目有像上图中效果的功能需求这也是很常见功能很简单功能,通过一个小例子和大家聊聊js的事件冒泡和默认事件. 先说说一般的实现方式即使用阻止事件冒泡的方式去做,给input绑定一个click事件(并 ...