题意



分析

考场40分

错误的Manacher+dp。

用\(f(i)\)表示\(s_{1 \sim i}\)的最长偶数回文覆盖长度,在Manacher的同时用刷表法转移,每次还要对\(f(i-1)\)取\(\max\)。

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; const int MAXN=1e6+7;
int n;
char s[MAXN];
char s_new[MAXN<<1];
int p[MAXN<<1]; int Init()
{
int len=strlen(s);
s_new[0]='$';
s_new[1]='#';
int j=2;
for(int i=0;i<len;++i)
{
s_new[j++]=s[i];
s_new[j++]='#';
}
s_new[j]=0;
return j;
} int f[MAXN]; void Manacher()
{
int len=Init();
int id,mx=0;
for(int i=1;i<len;++i)
{
if(i<mx)
p[i]=min(p[2*id-i],mx-i);
else
p[i]=1;
while(s_new[i-p[i]]==s_new[i+p[i]])
++p[i];
if(mx<i+p[i])
{
id=i;
mx=i+p[i];
}
if(i>1&&s_new[i]=='#')
{
f[i/2]=max(f[i/2],f[i/2-1]);
f[i/2+(p[i]-1)/2]=max(f[i/2+(p[i]-1)/2],f[i/2-(p[i]-1)/2]+p[i]-1);
}
}
} /*
0011011110
*/ int main()
{
// freopen("wzoi.in","r",stdin);
// freopen("wzoi.out","w",stdout);
scanf("%s",s);
n=strlen(s);
Manacher();
printf("%d\n",f[n]/2*10+(n-f[n])/2*5);
// fclose(stdin);
// fclose(stdout);
return 0;
}

然而考虑这组数据:

0011011110

\(f\)算出来:

0,2,2,2,4,4,6,6,8,8

更新没有覆盖整个偶数回文区间,导致出错。

要改的话要区间复杂的操作,无论是否有数据结构可行时间都不允许了。

好歹还有40分。

标解

单调栈+贪心解决问题。

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; int main()
{
freopen("wzoi.in","r",stdin);
freopen("wzoi.out","w",stdout);
string a,b;
cin>>a;
for(auto c:a)
{
if(b.empty()||b.back()!=c)
b.push_back(c);
else
b.pop_back();
}
printf("%d\n",5*(a.size()-b.size()/2));
// fclose(stdin);
// fclose(stdout);
return 0;
}

test20181007 wzoi的更多相关文章

  1. wzoi(栈模拟)

    链接:https://ac.nowcoder.com/acm/contest/332/I 来源:牛客网 题目描述 bleaves 最近在 wzoi 上面做题. wzoi 的题目有两种,一种是 noip ...

  2. 小胖办证 wzoi

    小胖办证 题目描述: xuzhenyi要办个签证.办证处是一座M层的大楼,1<=M<=100. 每层楼都有N个办公室,编号为1..N(1<=N<=500).每个办公室有一个签证 ...

  3. weapon制作武器

    weapon制作武器 (weapon.pas/c/cpp) 解题报告 制作武器weapon.pas/c/cpp) 背景 WZland的紧急避难所很快就建好了,WZland的居民们陆续地来到这个紧急避难 ...

  4. Noip2013之路

    当我回望过去的一年,我想,我对自己没有任何的愧疚,因为我每一个脚印,都踩的很坚实. 第一次参加模拟赛,第一次接触NOIP的规则,虽然考得不是特别好,但是还是很有收获的,首先,数组一定要开得足够大,不然 ...

  5. 夜未央Test1

    积木游戏(block.pas)   [题目描述] 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,最高的积木的最终需要达到h. 在搭建开始之前,没有任何积木(可以看成n ...

  6. 10.07 WZZX Day2总结

    今天仍然是KCZ出题.今天才知道KCZ不仅是WZ地区史上最强选手而且还是ZJ队长?在ZJOI拿到Rank1的男人?%%%%% 今天KCZ出题的依然很强势…… T1.wzoi 期望得分20-100 实际 ...

  7. NOIp2018集训test-10-6/test-10-7 (联考五day1/day2)

    昨天考完月考,明天初赛,dcoi2017级今天终于开始停课准备noip了,大概没有比本弱校停课更晚的学校了吧.本来就够菜了,怕是要凉透哦. DAY1 T1石头剪刀布 据说爆搜随便做,但是我觉得我的O( ...

随机推荐

  1. [.NET开发] C# 读写文件

    1.C#读文件 按行读取文件: public void Read(string path) { StreamReader sr = new StreamReader(path,Encoding.Def ...

  2. Django MySQL数据库操作

    上一篇文章写了一些基本的Django操作,下面重点介绍数据库的内容. 对象之间的关系: 一对一 一对多 多对多 1.一对多 先演示一对多的关系,多个blog对应一个名字, 修改blog/models. ...

  3. pip 源 替换国内源

    网上收集来的pip源地址: 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simp ...

  4. English trip -- VC(情景课)4 D

    What do you see? I can see three men in the pictrue. one older man is a doctor, two younger men are ...

  5. DownLoadImage

    Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA&quo ...

  6. 3 python 基本数据类型

    1.python的基本数据类型 1.字符串 不可变数据类型 2.int //整除 %取余 bit_length() print(a.bit_length()) #打印某个数字类型的二进制长度 3.bo ...

  7. 获取Oracle数据库awr报告方法

    --登录数据库  sqlplus username/passwd; --运行生成AWR报告脚本  SQL> @?/rdbms/admin/awrrpt.sql; --输入要生成报告的格式:htm ...

  8. PHP:第二章——PHP中的流程控制语句

    if语句的集中形式 <?php /*if(条件) 语句; if(条件){语句块} if(条件){语句或语句块}else{语句或语句块} if(条件){语句或语句块}elseif(条件){语句或语 ...

  9. UVALive 5881

    DES:给出一个数列.然后有q个询问,对给定的区间内是否有重复的数.如果有输出任意一个重复的.如果没有输出OK. 开始以为是线段树.后来发现.只是水的比较隐蔽.感觉这个方法还是很聪明的.把每个点的最近 ...

  10. WEBSERVICE-AXIS2服务端代码

    下载axis2的插件 axis2-eclipse-codegen-plugin-1.7.1.zip axis2-eclipse-service-plugin-1.7.1.zip 解压后,将plugin ...