Ugly Pairs CodeForces - 1156B
Posted ssummerzzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ugly Pairs CodeForces - 1156B相关的知识,希望对你有一定的参考价值。
题目链接:https://vjudge.net/problem/CodeForces-1156B
题意:给定一串字符,相邻字符的ASCII码不能是相邻的数字,比如ABC,假设ASCII码为,99 100 101 ,
就是不符合题意的字符串,ACF,就可以。
思路:从相邻字符的ASCII码不能是相邻的数字,可以想到字符串之间ASCII码至少差2,然后发现
ACE...假设是奇数ASCII码,BDF是偶数ASCII码,那么我们不妨把他们分成两组,
奇数的字符,偶数的字符,那就简单了,我们可以直接先把奇数的输出,再把偶数的输出,那么字符串
之间相邻字符的ASCII码不能是相邻的数字就很好来解决了,下面字符串都转化为数字,列举一些情况
① 只有偶数
② 只有奇数
③ 1 3 5 7 2
④ 1 3 5 7 6
⑤ 1 3 2
⑥ 1 3 2 4
下面四种情况判定下就OK了,代码有呼应。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <queue> 6 #include <map> 7 #include <cmath> 8 #include <iomanip> 9 using namespace std; 10 11 typedef long long LL; 12 #define inf (1LL << 25) 13 #define rep(i,j,k) for(int i = (j); i <= (k); i++) 14 #define rep__(i,j,k) for(int i = (j); i < (k); i++) 15 #define per(i,j,k) for(int i = (j); i >= (k); i--) 16 #define per__(i,j,k) for(int i = (j); i > (k); i--) 17 18 19 int main() 20 21 ios::sync_with_stdio(false); 22 cin.tie(0); 23 24 char str[110]; 25 vector<int> one; 26 vector<int> two; 27 28 int T; 29 cin >> T; 30 while(T--) 31 32 cin >> str; 33 34 one.clear(); //奇数 35 two.clear(); //偶数 36 int len = strlen(str) - 1; 37 rep(i,0,len) 38 int tmp = str[i] - ‘a‘ + 1; 39 //判奇偶 40 if(tmp & 1) one.push_back(tmp); 41 else two.push_back(tmp); 42 43 44 //排好序,方便比较 45 sort(one.begin(),one.end()); 46 sort(two.begin(),two.end()); 47 //只有偶数 48 if(one.size() == 0) 49 rep(o,0,(int)two.size() - 1) cout << (char)(‘a‘ + two[o] - 1); 50 cout << endl; 51 52 //只有奇数 53 else if(two.size() == 0) 54 rep(o,0,(int)one.size() - 1) cout << (char)(‘a‘ + one[o] - 1); 55 cout << endl; 56 57 else 58 int End_b = two.size() - 1; 59 int End_a = one.size() - 1; 60 61 //判断③④⑤⑥的情况 62 if(abs(two[0] - one[End_a]) != 1) 63 rep(o,0,(int)one.size() - 1) cout << (char)(‘a‘ + one[o] - 1); 64 rep(o,0,(int)two.size() - 1) cout << (char)(‘a‘ + two[o] - 1); 65 cout << endl; 66 67 else if(abs(two[End_b] - one[0]) != 1) 68 rep(o,0,(int)two.size() - 1) cout << (char)(‘a‘ + two[o] - 1); 69 rep(o,0,(int)one.size() - 1) cout << (char)(‘a‘ + one[o] - 1); 70 cout << endl; 71 72 else cout << "No answer" << endl; 73 74 75 76 77 78 getchar(); getchar(); 79 return 0; 80
以上是关于Ugly Pairs CodeForces - 1156B的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 159D Palindrome pairs
CodeForces - 1189 E.Count Pairs (数学)