题意:

Fish 是一条生活在海里的鱼。有一天他很无聊,就到处去寻宝。他找到了位于海底深处的宫殿,但是一扇带
有密码锁的大门却阻止了他的前进。
通过翻阅古籍,Fish 得知了这个密码的相关信息:
1. 该密码的长度为N。
2. 密码仅含小写字母。
3. 以每一个字符为中心的最长回文串长度。
4. 以每两个相邻字符的间隙为中心的最长回文串长度。
很快Fish 发现可能有无数种满足条件的密码。经过分析,他觉得这些密码中字典序最小的一个最有可能是答
案,你能帮他找到这个密码么?
注意:对于两个串A 和B,如果它们的前i 个字符都相同,而A 的第i +1 个字符比B 的第i +1 个字符小,
那么认为是则称密码A 的字典序小于密码B 的字典序,例如字符串abc 字典序小于字符串acb。如果密
码A 的字典序比其他所有满足条件的密码的字典序都小,则密码A 是这些密码中字典序最小的一个。

SOL:

  就是乱搞,首先第一个字母一定是a,然后对于一个回文串,它的两边是对称的,那么我们可以对于每一个不位于某个回文串上的字母贪心,能取哪个取哪个,同时对于回文串的两头外侧一个字符显然不相同,那么我们标记一下. 维护一个右端点...O(n)乱搞即可.

  说不清楚,正确性也说不清楚,实现细节看代码,正确性请自行脑补.

Code:

  

/*==========================================================================
# Last modified: 2016-03-09 08:39
# Filename: t1.cpp
# Description:
==========================================================================*/
#define me AcrossTheSky
#include <cstdio>
#include <cmath>
#include <ctime>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #include <set>
#include <map>
#include <stack>
#include <queue>
#include <vector> #define lowbit(x) (x)&(-x)
#define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
#define FORP(i,a,b) for(int i=(a);i<=(b);i++)
#define FORM(i,a,b) for(int i=(a);i>=(b);i--)
#define ls(a,b) (((a)+(b)) << 1)
#define rs(a,b) (((a)+(b)) >> 1)
#define getlc(a) ch[(a)][0]
#define getrc(a) ch[(a)][1]
#define getl(i,t) (i)-a[(t)][(i)]/2
#define getr(i,t) (i)+a[(t)][(i)]/2 #define maxc 26
#define maxn 150000
#define maxm 100000
#define pi 3.1415926535898
#define _e 2.718281828459
#define INF 1070000000
using namespace std;
typedef long long ll;
typedef unsigned long long ull; template<class T> inline
void read(T& num) {
bool start=false,neg=false;
char c;
num=0;
while((c=getchar())!=EOF) {
if(c=='-') start=neg=true;
else if(c>='0' && c<='9') {
start=true;
num=num*10+c-'0';
} else if(start) break;
}
if(neg) num=-num;
}
/*==================split line==================*/
bool ch[maxn][maxc];
int a[2][maxn];
char s[maxn];
int main(){
int n; read(n);
FORP(i,1,n) read(a[0][i]);
FORP(i,1,n-1) read(a[1][i]);
memset(ch,true,sizeof(ch));
ch[1][0]=true;
//int len=n+n-1;
s[1]='a';
int len=n; int r=0;
FORP(i,1,len){
if (i>r){
FORP(j,0,25) if (ch[i][j]) {
s[i]='a'+j; break;
}
}
int rr=getr(i,0),ll=getl(i,0);
if (rr>r){
FORP(j,r+1,rr) s[j]=s[2*i-j];
r=rr;
}
if (ll>0) ch[rr+1][s[ll-1]-'a']=false;
if (i==len) continue;
rr=getr(i,1),ll=getl(i,1);
if (rr>r) {
FORP(j,r+1,rr) s[j]=s[2*i-j+1];
r=rr;
}
if (ll>0) ch[rr+1][s[ll]-'a']=false;
}
FORP(i,1,n) printf("%c",s[i]);
}

SCOI 2013 密码 & 乱搞的更多相关文章

  1. HDOJ 4696 Answers 乱搞

    乱搞: rt.有1就能输出全部的数,否则仅仅能输出偶数 Answers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/1 ...

  2. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  3. hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  5. UVA 11853 [dfs乱搞]

    /* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...

  6. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  7. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  8. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][ ...

  9. 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞

    2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 70  Solved: 24[Submit][Status][D ...

随机推荐

  1. VCC、VDD、VSS、 VEE 和VPP的区别

    在电子电路中,常可以看到VCC.VDD和VSS三种不同的符号,它们有什么区别呢? 一.解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压: VDD:D=device 表示器件的意思, ...

  2. C++杂记

    变量就是一个地址,同进程内可以直接访问,要做好线程之间的同步就是了.——摘自CSDN 2015-06-18 16:58:10(注:注意变量的生命周期(作用域就可以不在意))

  3. [译] EXTENDING JQUERY – 2.2 A simple plugin

    2.2 一个简单的插件示例 jQuery 插件能做任何事情,这个已经由浩如烟海的各类第三方插件如证明.小到只影响一个元素,大到改变多个元素的外观和行为,jQuery 的各种功能等你来扩展. 2.2.1 ...

  4. Win10 保存Element到相册

    保存控件到相册 private async void saveImg_Click(object sender, RoutedEventArgs e) { StorageFolder savedPics ...

  5. windows多线程详解

    转自:http://blog.csdn.net/zhouxuguang236/article/details/7775232 在一个牛人的博客上看到了这篇文章,所以就转过来了,地址是http://bl ...

  6. Shell拆分大文件

    需求:由于文件过大,不方便进行相关的操作,需要将其拆分成大小小于500000B,即488.28125k的文件.同时,为了保证文件的可读性,行内不可以分割,同时,由于内容是块状可读,按照日期进行分割的, ...

  7. matlab练习程序(Moravec算子)

    这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适. 算法原理如下: 1.选取一个合理的邻域遍历图像,这里是5*5邻域的.在邻域中依次计算,垂直,水平,对角与反对角 ...

  8. Linux学习笔记(7)Linux常用命令之压缩解压命令

    (1)gzip gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 例:将/etc目录下的services文 ...

  9. MFC中afx_msg是什么,afx_msg void function()是什么意思

    应用程序框架产生的消息映射函数例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体:而在map宏定义中,就有 ...

  10. Markdown语言.md文件

    转自:http://www.kuqin.com/shuoit/20141125/343459.html 之前一直在使用github,也在上面分享了不少的项目和Demo,每次创建新项目的时候,使用的都是 ...