51 Nod 2485 小b重排字符串
题目
小b有一个字符串S,全部为小写字母,现在她希望重排列S,使得S中相邻字符不同。
请你判断小b是否可能成功。
样例解释:将"aab"重排为"aba"即可。
分析
找到出现次数最大的次数k,设字符串长度为n。
如果n为偶数数,那么k最大为 n/2。
如果n为奇数,那么k 最大 为 n/2+1。
超过的话就不合格
#include <bits/stdc++.h>
#pragma GCC diagnostic error "-std=c++11"
#define d(x) cout << (x) << endl
#define INF 0x3f3f3f3f
#define eps 1e-8
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 1e3 + 10;
int arr[26];
int main()
{
string a;
cin >> a;
for(auto x : a){
arr[x - 'a']++;
}
sort(arr, arr + 26);
if(a.size() & 1){
cout << (arr[25] > a.size() / 2 + 1 ? "Impossible" : "Possible") << endl;
}else{
cout << (arr[25] > a.size() / 2 ? "Impossible" : "Possible") << endl;
}
}