[51nod1410]回文调整
给一个序列,选择其中一个区间,这个区间内的数字顺序可以随意互换。问有多少这样的选择使得整个序列(不是选择的区间)是一个回文。
说明:为了要使得整个序列是一个回文,可以选择一个区间对里面的数字进行调整,然后使得整个串是一个回文。
问有多少这样的区间可供选择?
Input
输入共2行。
第一行有一个整数n。(1 <= n <= 100,000)
第二行n个整数a[i],(0<=a[i]<=n).
Output
对于每一组数据,输出答案占一行。
还是跑去cf上看题解...
先把两端回文的去掉,对于剩下的,分别求出要使序列合法,需要选择的最短前缀、后缀。然后就可以算了。。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
#define ui unsigned int
#define ull unsigned long long
const int maxn=,inf=;
int a[maxn],b[maxn],rest[maxn],need[maxn];
int i,j,k,n,m; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while((rx<''||rx>'')&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra*fh;
} int main(){register int i,j;
while(scanf("%d",&n)!=EOF){
for(i=;i<=n;i++)a[i]=read();
for(m=;(m<<)<=n&&a[m]==a[n-m+];m++);
if((m<<)>n){printf("%lld\n",1ll*n*(n+)>>);continue;} int n1=n-((m-)<<);
memset(rest,,(n+)<<),memset(need,,(n+)<<);
for(i=;i<=n1;i++)rest[b[i]=a[i+m-]]++;
int odd=;
for(i=;i<=n;i++)odd+=rest[i]&;
if(odd>(n1&)){puts("");continue;} for(i=n1;i;i--){
rest[b[i]]--,need[b[i]]++;
if((i<<)<=n1)
if(b[i]==b[n1-i+])need[b[i]]-=;else break;
if((i<<)==n1+)need[b[i]]--;
if(need[b[i]]>rest[b[i]])break;
}int L=i; memset(rest,,(n+)<<),memset(need,,(n+)<<);
for(i=;i<=n1;i++)rest[b[i]]++;
for(i=;i<=n1;i++){
rest[b[i]]--,need[b[i]]++;
if((i<<)>n1+)
if(b[i]==b[n1-i+])need[b[i]]-=;else break;
if((i<<)==n1+)need[b[i]]--;
if(need[b[i]]>rest[b[i]])break;
}int R=n1-i+;
// printf(" m:%d L:%d R:%d\n",m,L,R);
printf("%lld\n",1ll*m*(m + *n1-L-R));
}
}
[51nod1410]回文调整的更多相关文章
- 回文质数 Prime Palindromes
题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...
- 关于回文串的DP问题
问题1:插入/删除字符使得原字符串变成一个回文串且代价最小 poj 3280 Cheapest Palindrome 题意:给出一个由m中字母组成的长度为n的串,给出m种字母添加和删除花费的代价,求让 ...
- 【做题】BZOJ2342 双倍回文——马拉车&并查集
题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...
- 计蒜之道 初赛 第三场 题解 Manacher o(n)求最长公共回文串 线段树
腾讯手机地图 腾讯手机地图的定位功能用到了用户手机的多种信号,这当中有的信号的作用范围近.有的信号作用的范围则远一些.有的信号相对于用户在不同的方位强度是不同的,有的则是在不论什么一个方向上信号强度都 ...
- 回文质数 USACO
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 15 ...
- 经典DP模型--回文词--IOI2000
[问题描述]回文词是一种对称的字符串--也就是说, 一个回文词, 从左到右读和从右到左读得到的结果是一样的. 任意给定一个字符串, 通过插入若干字符, 都可以变成一个回文词. 你的任务是写一个程序, ...
- Java实现 LeetCode 125 验证回文串
125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...
- LeetCode[5] 最长的回文子串
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
随机推荐
- iOS 科学计数法保留N位有效数字
iOS开发 项目中用到了将一个很大的数值转换成科学计数法的需求,转换成科学计数法的方式在iOS中其实是很好做的,使用NSNumber 的 kCFNumberFormatterScientificSty ...
- 我是如何确认线上CLOSE_WAIT产生的原因及如何解决的。
1.阐述 内部架构:Tomcat应用程序---> nginx ---> 其他Tomcat应用程序,内部Tomcat应用通过nginx调用其他应用. HTTP插件:HttpClient 4. ...
- python爬虫爬取大众点评并导入redis
直接上代码,导入redis的中文编码没有解决,日后解决了会第一时间上代码!新手上路,多多包涵! # -*- coding: utf-8 -*- import re import requests fr ...
- python Is 与== 的坑
以前看过一篇python技术贴,说用is替代==,这样更加pythonic?然后我就能把用'=='的地方用'Is'替代,结果程序运行结果的偏差很大,甚至完全不同.后来发现,Is与==使用上是有区别的. ...
- oracle 处理时间和金额大小写的相关函数集合
CREATE OR REPLACE FUNCTION MONEY_TO_CHINESE(MONEY IN VARCHAR2) RETURN VARCHAR2 IS C_MONEY ); M_STRIN ...
- 使用Word进行文档修订版本的比较
项目经理在实际的工作过程中,比如要写文档方案,就需要对文档的修订版本进行管理和控制.在以前的工作中,笔者使用的是UltraEdit这个软件工具中的Ultra Compare这个子工具来进行的文档版本的 ...
- robotframework的学习笔记(十二)------DatabaseLibrary 库
1.安装DatabaseLibrary库 DatabaseLibrary 下载地址:https://pypi.python.org/pypi/robotframework-databaselibrar ...
- angular4.0快速import依赖路径
快捷键:ALT + ENTER 直接import对应的依赖路径
- [代码审计]青云客Cms前台有条件注入至getshell,后台xss至getshell、至弹你一脸计算器
之前写了一篇关于青云客cms的文章,发在了t00ls,就不copy过来了. 给个链接,好记录一下. https://www.t00ls.net/thread-43093-1-1.html
- ASP.NET MVC 设置区域默认定向
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "m_defau ...