【codeforces 527B】Error Correct System
2017-10-04 18:45
337 查看
【题目链接】:http://codeforces.com/contest/527/problem/B
【题意】
给你两个字符串;
允许你交换一个字符串的两个字符一次;
问你这两个字符串最少会有多少个位置上的字符不同
【题解】
考虑一次交换能够造成的结果
->不同的字符个数减少1
->不同的字符个数减少2
先考虑减少1
记录第一个字符串哪些字符和第二个字符串的不一样记录下来
然后扫描第二个字符串的每个字符,找到不同字符的位置,看看第二个字符串那个位置的字符有没有在第一个字符串里面出现过(刚才有记录的);
如果有的话,就说明能找到不同字符个数减少1的情况;
然后再考虑减少2的情况;
直接扫描一遍字符
如果s1[i]!=s2[i];
则a[s1[i]][s2[i]]=i
然后两层for循环i,j
如果a[i][j]&&a[j][i];
则交换a[i][j]和a[j][i]的字符,就能减少2了;
【完整代码】
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define mp make_pair #define ps push_back #define fi first #define se second #define rei(x) scanf("%d",&x) #define rel(x) scanf("%lld",&x) #define ref(x) scanf("%lf",&x) typedef pair<int, int> pii; typedef pair<LL, LL> pll; const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 }; const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 }; const double pi = acos(-1.0); const int N = 256; const int L = 2e5 + 100; int a[256][256],n,v[256],l=-1,r=-1,sub,ans = 0; char s[L], t[L]; int main() { //freopen("F:\\rush.txt", "r", stdin); rei(n); scanf("%s", s + 1); scanf("%s", t + 1); rep1(i, 1, n) if (s[i]!=t[i]) { ans++; v[s[i]] = i; a[s[i]][t[i]] = i; } rep1(i,1,n) if (t[i] != s[i]) { if (v[t[i]]) { l = v[t[i]], r = i; sub = 1; break; } } for (char i = 'a';i <= 'z';i++) for (char j = 'a';j <='z';j++) if (a[i][j] && a[j][i]) { l = a[i][j], r = a[j][i]; sub = 2; break; } ans -= sub; printf("%d\n", ans); printf("%d %d\n", l, r); //printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC); return 0; }
相关文章推荐
- CodeForces 527B - Error Correct System 哈希
- CF_527B_ErrorCorrectSystem
- 思维题——Error Correct System
- Codeforces Round #296 (Div. 2) B. Error Correct System
- 字符串处理 Codeforces Round #296 (Div. 2) B. Error Correct System
- Error Correct System(模拟)
- CF Error Correct System
- B. Error Correct System (CF Round #296 (Div. 2))
- Error Correct System(有技巧的暴力)
- Codeforces Round #296 (Div. 2)——B——Error Correct System
- Codeforces Round #296 (Div. 2) B. Error Correct System
- B. Error Correct System
- Codeforces Round #296 (Div. 2) - B. Error Correct System(脑洞)
- B. Error Correct System (CF Round #296 (Div. 2))
- Codeforces Round #296 (Div. 2) B. Error Correct System
- Error Correct System
- Error:/etc/fstab:Read-only file system
- xml无法显示(Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again la
- 关于hyper-v disk2vhd p2v后出现Error loading operating system的解决方案
- ORA-00604: error occurred at recursive SQL level 1 ORA-01653: unable to extend table SYS.AUD$ by 8192 in tablespace SYSTEM