luogu P2462 [SDOI2007]游戏
LINK:SDOI2007游戏
题意:接龙前一个要比后面大1 且后一个单词出现的各自字母的次数>=前一个单词各自的字母的次数
考虑暴力dp sort之后dpY 显然会T.
考虑我们没必要枚举j 我们知道后面的要找到前面的一个决策可以通过删掉一个字母来实现 由于删掉最多26个字母我们暴力枚举26种情况。
字符串hash快速查找即可。建议开map查 多一个小log...
窝是看标签有虚树才写这道题的 结果和虚树没什么关系。。
至于怎么hash 对每个len进行hash这样的话不容易冲突 hash随便想一个法则hash就行了 求稳的话就双hash吧。开链表hash也行
写着有点烦了 逻辑很混乱 说好不采用通常字符串hash的 虽然没用但是复杂度更高 考试的时候还是建议前后缀hash 然后逐位判断 顺便上双hash + 链表防止冲突。
我随便写了一个hash方法。。map开的也是醉了。。
当然要注意的一点是 输入问题 字符串不知道有多少行的输入 可以~scanf 来这样写好像是没读到会返回-1 但是普通时候好像会返回0 总之记住即可,字符串的时候要这样写。
const int MAXN=10010;
int n,ans,pos;
int pre[MAXN];
struct wy
{
int len,id;
int c[26];
}t[MAXN];
char a[MAXN][110];
inline int cmp(wy a,wy b){return a.len<b.len;}
map<int,pii>H[110];
inline void get_path(int x)
{
if(!x)return;
get_path(pre[x]);
printf("%s\n",a[t[x].id]+1);
}
int main()
{
freopen("1.in","r",stdin);
while(~scanf("%s",a[++n]+1))
{
t[n].len=strlen(a[n]+1);t[n].id=n;
rep(1,t[n].len,j)++t[n].c[a[n][j]-'a'];
}
--n;
sort(t+1,t+1+n,cmp);
rep(1,n,i)
{
ll ha=0,mx=0,ha1=0;
rep(0,25,j)
{
ha1=(ha1*P+(j+1)*t[i].c[j])%mod;
if(!t[i].c[j])continue;
--t[i].c[j];ha=0;
rep(0,25,k)ha=(ha*P+(k+1)*t[i].c[k])%mod;
if(H[t[i].len-1].find(ha)!=H[t[i].len-1].end())
{
pii w=H[t[i].len-1][ha];
if(w.F>mx)mx=w.F,pre[i]=w.S;
}
++t[i].c[j];
}
++mx;H[t[i].len][ha1]=mk(mx,i);
if(mx>ans)ans=mx,pos=i;
}
put(ans);
get_path(pos);
return 0;
}
luogu P2462 [SDOI2007]游戏的更多相关文章
- 洛谷P2462 [SDOI2007]游戏(哈希+最长路)
题面 传送门 题解 我们把字符的出现次数哈希起来,然后把每个点向能在它之后的点连边.那么这显然是一个\(DAG\),直接求最长路就行了 //minamoto #include<bits/stdc ...
- [luogu]P1070 道路游戏[DP]
[luogu]P1070 道路游戏 题目描述小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...
- [Luogu P3825] [NOI2017] 游戏 (2-SAT)
[Luogu P3825] [NOI2017] 游戏 (2-SAT) 题面 题面较长,略 分析 看到这些约束,应该想到这是类似2-SAT的问题.但是x地图很麻烦,因为k-SAT问题在k>2的时候 ...
- Luogu P4705 玩游戏
题目描述 Alice 和 Bob 又在玩游戏. 对于一次游戏,首先 Alice 获得一个长度为 的序列 ,Bob 获得一个长度为 的序列 bb.之后他们各从自己的序列里随机取出一个数,分别设 ...
- luogu P2123 皇后游戏
传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...
- Luogu 1764 翻转游戏 - 枚举 + 搜索
题目描述 kkke在一个n*n的棋盘上进行一个翻转游戏.棋盘的每个格子上都放有一个棋子,每个棋子有2个面,一面是黑色的,另一面是白色的.初始的时候,棋盘上的棋子有的黑色向上,有的白色向上.现在kkke ...
- [题目] Luogu P1312 Mayan游戏
题面 题目描述 $ Mayan puzzle $是最近流行起来的一个游戏.游戏界面是一个 \(7行 \times 5列\)的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放 ...
- Luogu 1070 道路游戏
看完题面想了一会发现只会写$n^3$,愣了一会才想出了单调队列优化的做法. 90分算法: 设$f_{i, j, k}$表示第$i$分钟在第$j$座城市已经走了$k$步的最大价值,转移显然,时间复杂度$ ...
- 【luogu P1558 色板游戏】 题解
题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...
随机推荐
- 使用@AutoConfigureBefore调整配置顺序竟没生效?
一个人的价值体现在能够帮助多少人.自己编码好,价值能得到很好的体现.若你做出来的东西能够帮助别人开发,大大减少开发的时间,那就功德无量. 作者:A哥(YourBatman) 公众号:BAT的乌托邦(I ...
- unity 自实现协程总结
unity本人自实现了一个协程调用. 只是moveNext()的简单协程调用和封装,这个没什么好说的, 网上例子一大堆. 但使用的过程中遇到了几个问题. 1. 自己写的moveNext() 协程不能等 ...
- python入门009
目录 四.列表 1.定义:在[]内,用逗号分隔开多个任意数据类型的值 2.类型转换:但凡能被for循环遍历的数据类型都可以传给list()转换成列表类型,list()会跟for循环一样遍历出数据类型中 ...
- [SpringBoot] 使用yaml文件实现多配置
SpringBoot 使用yaml文件实现多配置 SpringBoot利用yaml文件实现多配置有两种方式: 单个yml中编写多个配置(Multi-profile YAML Documents) 编写 ...
- 权力越大职责越大——C#中的职责链模式
大家好,欢迎来到老胡的博客,今天我们继续了解设计模式中的职责链模式,这是一个比较简单的模式.跟往常一样,我们还是从一个真实世界的例子入手,这样大家也对这个模式的应用场景有更深刻的理解. 一个真实的 ...
- Alink漫谈(十) :线性回归实现 之 数据预处理
Alink漫谈(十) :线性回归实现 之 数据预处理 目录 Alink漫谈(十) :线性回归实现 之 数据预处理 0x00 摘要 0x01 概念 1.1 线性回归 1.2 优化模型 1.3 损失函数& ...
- 02 drf源码剖析之快速了解drf
02 drf源码剖析之快速了解drf 目录 02 drf源码剖析之快速了解drf 1. 什么是drf 2. 安装 3. 使用 3. DRF的应用场景 1. 什么是drf drf是一个基于django开 ...
- bzoj2132圈地计划
bzoj2132圈地计划 题意: 一块土地可以纵横划分为N×M块小区域.于第i行第j列的区域,建造商业区将得到Aij收益,建造工业区将得到Bij收益.而如果区域(i,j)相邻(相邻是指两个格子有公共边 ...
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- 5分钟带你快速入门和了解 OAM Kubernetes
什么是 OAM? OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出. OAM 解决了什么问题? OAM 本质是为了解耦K8S中现存的形形色色 ...