codevs2019 Uva10029 递变阶梯
递变是指通过增加、减少或改变单词x中的一个字母,使它变成字典中的另一个单词y。比如将dig变成dog,将dog变成do都是递变。递变阶梯是一个按字典序排列的单词序列w1,w2,...wn,满足对于从1到n-1的所有i,单词wi到wi+1都是一次递变。相同的单词之间不能递变。n=15000
给出一部字典,你要计算其中最长的递变阶梯。
题目分析
容易看出这是一个DAG的最长路(类似LIS),那么我们可以想到一个O(n^2)的算法,显然超时.
换个方式想,如果我们枚举每个字符串可以变成的另一个字符串,再判断是否在里面,那么容易发现不会超时(15000*16*26),那么我们可以这样建图,然后走DAG最长路,很可惜我下面这份代码由于Hash的特殊性,无法通过Uva,仅能通过Codevs
题目代码
#include<bits/stdc++.h>
using namespace std;
string str[];
const int base = ;
typedef unsigned long long ull;
ull f[][];
ull base_pow[],ans[];
ull num[],pla[];
ull mod = ; int main(){
int n=;
while(cin>>str[++n])if(str[n]==str[n-])n--;
n--;
base_pow[]=;
for(int i=;i<=;i++)base_pow[i]=base_pow[i-]*base;
for(int i=;i<=n;i++){
f[i][]=str[i][]-'a'+;
for(int j=;j<str[i].length();j++)
f[i][j]=f[i][j-]*base+str[i][j]-'a'+;
num[f[i][str[i].length()-]%mod]=;
pla[f[i][str[i].length()-]%mod]=i;
}
for(int i=;i<=n;i++)ans[i]=;
for(int i=;i<=n;i++){
string s=str[i];
for(int j=;j<s.length();j++){
ull sd = f[i][s.length()-];
sd-=f[i][j]*base_pow[s.length()-j-];
if(j->=)
sd+=f[i][j-]*base_pow[s.length()-j-];
if(num[sd%mod]&&pla[sd%mod]<i&&s.length()->)
ans[i]=max(ans[i],ans[pla[sd%mod]]+);
}
for(int j=;j<s.length();j++){
ull sd = f[i][s.length()-];
sd-=f[i][j]*base_pow[s.length()-j-];
if(j->=)
sd+=f[i][j-]*base_pow[s.length()-j-];
if(num[sd%mod]&&pla[sd%mod]>i&&s.length()->)
ans[pla[sd%mod]]=max(ans[pla[sd%mod]],ans[i]+);
}
for(int j=;j<str[i].length();j++){
ull sd;
for(int k=;k<=;k++){
sd = f[i][s.length()-];
sd-=f[i][j]*base_pow[s.length()-j-];
sd+=k*base_pow[s.length()-j-];
if(j->=)
sd+=f[i][j-]*base_pow[s.length()-j];
if(num[sd%mod]&&pla[sd%mod]>i)
ans[pla[sd%mod]]=max(ans[pla[sd%mod]],ans[i]+);
}
}
}
ull maxx=;
for(int i=;i<=n;i++){
maxx=max(maxx,ans[i]);
}
cout<<maxx;
}
codevs2019 Uva10029 递变阶梯的更多相关文章
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 向苹果App Store提交新应用的图文教程(转)
当你克服重重困难终于开发出了自己的App,下一步就是向App Store提交应用了,这时应该如何操作呢?我的App真的准备好提交了?我敢肯定这些问题将会浮现在你的脑海.基于这篇教程,我将告诉你一个完整 ...
- 20160204.CCPP体系详解(0014天)
程序片段(01):define.h+data.h&data.c+control.h&control.c+view.h&view.c+AI.h&AI.c+main.c 内 ...
- AHK(1)之运行程序或打开文档
小鸟学AHK(1)之运行程序或打开文档 AHK就是AutoHotKey,是一款免费的.Windows平台下开放源代码的热键脚本语言. 亲爱的朋友,叫我怎么向你推荐它呢! COOL,对,就是酷,那么 ...
- iOS开发- 获取精确剩余电量
[UIDevice currentDevice].batteryMonitoringEnabled = YES; double deviceLevel = [UIDevice currentDevic ...
- 关于前端的photoshop初探的学习笔记
写在前边 这还是高三的时候暑假的时候学习这个软件时记的笔记呢,今天又在电脑上找到了它,总觉得不应该让他尘封在我的硬盘上,于是挂了出来.温馨提示:比较乱,写给自己看的,看不下去,按ctrl+W 笔记内容 ...
- 20160217.CCPP体系详解(0027天)
程序片段(01):TestCmd.c 内容概要:管道_字符串 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include < ...
随机推荐
- SpringMVC 集成velocity
前言 没有美工的时代自然少不了对应的模板视图开发,jsp时代我们用起来也很爽,物极必反,项目大了,数据模型复杂了jsp则无法胜任. 开发环境 idea2016.jdk1.8.tomcat8.0.35 ...
- php审核操作
注册页面zhuce.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解
iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解 iOS开发中,我们常常将一块View封装起来,以便于统一管理内部的子控件.如iOS回顾笔记(02)中的"书" ...
- 如何用好消息推送(JPush)为app拉新、留存、促活
如何用好消息推送(JPush)为app拉新.留存.促活 作为移动端APP产品运营最重要的运营手段,消息推送(JPush)被越来越多的APP厂商所重视,在信息泛滥的移动互联网时代,手机APP应用安装得越 ...
- hadoop使用笔记
一:hadoop程序添加三方包: 使用hadoop jar 运行时 抛出 java.lang.NoClassDefFoundError 原因:找不到三方包 解决方案: 1.可以将需要使用的包添加进 $ ...
- js原生Ajax 的封装和原理
原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...
- KoaHub平台基于Node.js开发的Koa EJS渲染插件代码信息详情
koa-ejs ejs render middleware for koa koa-ejs Koa ejs view render middleware. support all feature of ...
- 详解< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />
< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 这是个是 ...
- Webpack单元测试,e2e测试
此篇文章是续 webpack多入口文件.热更新等体验,主要说明单元测试与e2e测试的基本配置以及相关应用. 一.单元测试 实现单元测试框架的搭建.es6语法的应用.以及测试覆盖率的引入. 1. 需要安 ...
- gcc下c++的对象模型 (1)
所有示例代码在如下环境中执行 ubuntu 16.04.4 (64位) gcc version 5.4.0 开启std11 gdb version 7.11.1 1. 空类的大小 定义一个空类A,实例 ...