51 Nod 2485 小b重排字符串

本文详细介绍了如何解决51Nod2485小b重排字符串问题,通过分析字符串中字符的出现频率,判断是否可以重排字符串使相邻字符不同。提供了一种基于C++的实现方法,适用于算法竞赛和字符串操作学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值