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 ≤ ni ≠ 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

Input
9 pergament permanent
Output
1 4 6
Input
6 wookie cookie
Output
1 -1 -1
Input
4 petr egor
Output
2 1 2
Input
6 double bundle
Output
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(模拟)的更多相关文章

  1. CodeForces 527B Error Correct System

    Error Correct System Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I6 ...

  2. CF Error Correct System

    Error Correct System time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 字符串处理 Codeforces Round #296 (Div. 2) B. Error Correct System

    题目传送门 /* 无算法 三种可能:1.交换一对后正好都相同,此时-2 2.上面的情况不可能,交换一对后只有一个相同,此时-1 3.以上都不符合,则不交换,-1 -1 */ #include < ...

  8. codeforce Error Correct System

    题目大意: 给出两串n(1 ≤ n ≤ 200 000)个字母的字符串, 求出最多交换一对数, 使得不相同对数变少,求出不相同的对数以及交换的数的位置,若不需交换则输出-1,-1. 分析: 用矩阵记录 ...

  9. 【codeforces 527B】Error Correct System

    [题目链接]:http://codeforces.com/contest/527/problem/B [题意] 给你两个字符串; 允许你交换一个字符串的两个字符一次: 问你这两个字符串最少会有多少个位 ...

随机推荐

  1. python高级编程(第12章:优化学习)1

    # -*- coding: utf-8 -*-# python:2.x__author__ = 'Administrator'#由于5,6,7,8,9,10,11主要是在包,测试之类的学习所以这边就不 ...

  2. blockUI

    组件主页 主要使用到 blockUI 组件实现 将jquery和组件的JS下载到本地 然后直接就可以实现遮罩层功能 显示遮罩层:$.blockUI(); 隐藏遮罩层:$.unblockUI(); 该网 ...

  3. 用Visual Studio2010 编译 C++文件"hello world”

    本周开始学习C++语言,用Visual Studio 2010做编译器,发现站内还没有基础的关于用VS2010编译程序的教材.而且自己在网上寻找时候,教程难找,而且大都不详细.故写一个关于这方面的教程 ...

  4. 【iOS开发-66】QQ设置界面的案例:利用storyboard开发静态的tableView界面,核心是Static Cells

    (1)效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Vpc3ViYW8=/font/5a6L5L2T/fontsize/400/fill/I0JB ...

  5. Linux下redis的安装及用法

    1.下载源代码包redis-2.8.21.tar.gz,并将其上传到指定文件夹/urs/src,然后对其进行解压: [root@Slave1pc src]# tar -xvf redis-2.8.21 ...

  6. fopen 參数具体解释

    fopen fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path, ...

  7. XMLHttpResponse 在项目里面的运用

    前些天在项目里面遇到了一个问题,项目的列表页面每条记录后面都有按钮做审核操作,但是这个操作并不需要引起弹窗,只需要到后台修改一下这条记录的一些状态值,但是操作执行之后却没有刷新页面,只有重新载入或者刷 ...

  8. solr热身

    入博客园快满一年,居然没写一篇博客,好惭愧. 公司的搜索系统需要从Lucene.net(更新相当不给力)换成solr了,最近一直在学习solr,相关资料是相当的少啊,特别是还要在.net环境下开发.准 ...

  9. Windows下安装Django及WEB服务启动

           如果使用的是 Linux 或 Mac OS X ,系统可能已经预装了 Python .在命令提示符下 (或 OS X 的终端中) 输入python ,如果出现python编辑环境,说明 ...

  10. Javascript的事件委托

    在谈js的事件委托之前,先来简单说说js事件的一些基础知识吧. 什么是事件?Javascipt与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器中发生的一些特定的交互瞬间. 什么是事件流?事 ...