Making Anti-Palindromes

题目链接

Codeforces Round 867 (Div. 3)

E. Making Anti-Palindromes

挺好的一道鸽巢原理题。


思路:

贪心地来想,我们没必要动本来就不同的一对,而对相同的对,我们可以让它们互相之间进行交换,这样一次交换就可以拆散两对相同的字符对。

不过理想很美好,实际实施会发现会出现问题。首先,如果长度为奇数,中间的那个字符一定等于自己,这时一定无解,所以要特判。其次,有可能相同的对都是同一种字符,它们相互之间相互交换的都是相同的字符,这时就会出错。

所以我们需要保证某两对字符之间交换的两个字符是不同的。其实换个想法,就相当于不同的两对字符进行一次操作抵消掉了(也就是变成两对满足条件的对了)。这就和这种鸽巢原理的板题很像了,题解。

我们设字符串长度为 n n n,其中一共有 t o t tot tot 对相同的对,其中出现次数最多的字符 c h ch ch 的对有 m x mx mx 对。依据上面那道题的分析可以分成两部分:

  1. m x ≤ t o t − m x mx\le{tot-mx} mxtotmx 时,这时可以两两配对抵消,总共需要交换 ⌈ t o t 2 ⌉ \left\lceil\dfrac{tot}2\right\rceil 2tot 次。
  2. m x > t o t − m x mx\gt{tot-mx} mx>totmx 时,这时单靠相同的对之间两两抵消会剩下一些相同的对,它们都是字符 c h ch ch。不过我们还可以用其他的不相同的对来交换。不过也有限制,如果一对不相同的对中有一个字符为 c h ch ch,我们就不能拿这个对的字符来换。最后换好后,最多是每个对都含一个 c h ch ch,也就是字符的个数最多不能超过 n 2 \frac n2 2n。满足条件则一定可以换出满足条件的串。所以还是两种情况:
    1. 字符 c h ch ch 的总个数 l s t ≤ n 2 lst\le\dfrac n2 lst2n 时,因为每次交换一定选择一个 c h ch ch,交换次数等于相同的 c h ch ch 的对数 m x mx mx
    2. 字符 c h ch ch 的总个数 l s t > n 2 lst\gt\dfrac n2 lst>2n 时,无解。

code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;int T,n;
string s;int main(){cin>>T;while(T--){cin>>n>>s;if(n&1){puts("-1");continue;}s=" "+s;map<char,int> mp;int tot=0,maxx=0,lst=0;char ch;for(int i=1;i<=n/2;i++)if(s[i]==s[n-i+1]){mp[s[i]]++;tot++;if(mp[s[i]]>maxx){maxx=mp[s[i]];ch=s[i];}}if(tot==0){puts("0");continue;}for(int i=1;i<=n;i++)lst+=(s[i]==ch);if(lst>n-lst)puts("-1");else if(tot-maxx>=maxx)cout<<(tot+1)/2<<endl;else cout<<maxx<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/590077.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面试题(3)|解释 null 和 “null“ 之间的区别,并举例说明它们在编程中的使用场景

null 和 "null" 之间的区别主要在于语义和数据类型上&#xff1a; null 是一个特殊的值&#xff0c;通常用于表示缺少有效值或未定义的变量。在许多编程语言中&#xff0c;null是一个关键字&#xff0c;表示空值。例如&#xff0c;在Java中&#xff0c;当一个对象尚…

excel统计分析——协方差分析的作用

参考资料&#xff1a;生物统计学 1、协变量与试验因素的区别 如果把协方差分析资料中的协变量看作多因素方差分析资料中的一个因素&#xff0c;则两类资料有相似之处&#xff0c;但两类资料有本质的不同。在方差分析中&#xff0c;各因素的水平时人为控制的&#xff0c;即使是…

IP代理池是什么?怎样判断IP池优劣?

许多做跨境电商的朋友们都会使用到IP代理池这个模块&#xff0c;那会有新想加入到跨境电商这个行业的朋友们会有疑问&#xff0c;IP代理池究竟是什么&#xff1f;今天为你解答。 IP代理池是一种集成多个代理IP的系统&#xff0c;其核心功能在于收集并维护大量的可用IP地址&…

基于卷积神经网络的苹果等级分类系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 苹果等级分类系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的苹果等级分类系统是在pytorch框架下实现的&#xff0c;系统中有两…

STM32 TIM DMA burst 输出变频 PWM 波形

1. 问题背景 客户需要 MCU 输出一组变频的 PWM 波形来控制外围器件&#xff0c;并且不同频率脉冲的个数也不同。STM32U5 芯片拥有 TIM1/TIM8 高级定时器&#xff0c;还有通用定时器TIM2/TIM3/TIM4/TIM5 以及 TIM15/TIM16/TIM17。TIM 模块中&#xff0c;可通过修改 ARR 寄存器的…

C++基础13:C++输入输出

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 12.C输入/输出 12.1 C流类 计算机的输入和输出是数据传送的过…

2024年购买阿里云服务器多少钱?100元-5000元预算

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

E5071C是德科技E5071C网络分析仪

181/2461/8938产品概述&#xff1a; E5071C ENA 矢量网络分析仪&#xff0c;9 kHz 至 20 GHz&#xff0c;配有增强型 TDR 测量选件。E5071C 网络分析仪具有较高的射频性能和较快的速度&#xff0c;并具有宽频率范围和全面的功能。它是制造和研发工程师们测试频率范围在 20 GHz…