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 < ...
随机推荐
- HTTP基础知识(二)
接着上一章的内容:HTTP基础知识(一) 二.简单的HTTP协议 1.客户端:请求访问文本或图像等资源的一端称为客户端: 服务器端:提供资源响应的一端 2.以百度为例子 这是请求头: 在起始行 ...
- Linux TCP连接数修改
一. 文件数限制修改 (1) vi /etc/security/limits.conf * soft nofile 10240 * hard nofile 10240 ...
- 从C#到TypeScript - Proxy
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- 每天一个linux命令(32)--/etc/group文件详解
Linux /etc/group 文件与 /etc/passwd 和/etc/shadow 文件都是有关于系统管理员对用户和用户组管理时相关的文件.Linux /etc/group 文件是有关于系统管 ...
- Android中Handler使用浅析
1. Handler使用引出 现在作为客户,有这样一个需求,当打开Activity界面时,开始倒计时,倒计时结束后跳转新的界面(思维活跃的朋友可能立马想到如果打开后自动倒计时,就类似于各个APP的欢迎 ...
- Java设计模式之《单例模式》及应用场景
摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6510196.html 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该 ...
- 搭建hibernate环境
Hibernate概述什么是框架1 写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能 什么是hibernate框架(重点)1 hibernate框架应用在javaee三 ...
- Struts2框架(8)---Struts2的输入校验
Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...
- React-Native 开发(一) Android环境部署,Hello react-native
前提: 一个小web前端,完全不会android 跟iOS 的开发,首次接触,有很多不懂的问题.请见谅 环境: win7 成果: 一.SDK安装 提 ...
- Hadoop单机和伪分布式安装
本教程为单机版+伪分布式的Hadoop,安装过程写的有些简单,只作为笔记方便自己研究Hadoop用. 环境 操作系统 Centos 6.5_64bit 本机名称 hadoop001 本机IP ...