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 ...
随机推荐
- 总结《深入理解JVM》 G1 篇
注:一下内容主要结合<深入理解JVM>3th总结而来. 接上一篇,我们来说说G1,G1作为现在的主要的JVM GC,被作为各大互联网主要使用的垃圾回收器,了解G1回回收原理和回收过程,才能 ...
- cf1216E2 Numerical Sequence (hard version) 二分查找、思维题
题目描述 The only difference between the easy and the hard versions is the maximum value of k. You are g ...
- [TZOJ] 平台训练-V1
日常训练 训练网址:http://www.tzcoder.cn/ 1001: 整数求和 描述求两个整数之和.输入输入数据只包括两个整数A和B.输出两个整数的和.样例输入1 2样例输出3题目来源TZOJ ...
- 12个Visual Studio调试效率技巧
在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果 ...
- USTC信息安全期末重点
一.ARP协议问题1. ARP协议的作用是什么.地址解析协议,即IP地址和MAC地址之间的转换. 2. 引入ARP缓存的功能是什么.将这一映射关系保存在 ARP 缓存中,使得不必重复运行 ARP 协议 ...
- easy tornado
easy tornado 题目分析 这是一道2018年护网杯的题目 /flag.txt /welcome.txt /hints.txt 一共有3个文件. /flag.txt flag in /flll ...
- python 生成器(三):生成器基础(三)生成器表达式
生成器表达式可以理解为列表推导的惰性版本:不会迫切地构建列表,而是返回一个生成器,按需惰性生成元素.也就是说,如果列表推导是制造列表的工厂,那么生成器表达式就是制造生成器的工厂. 示例 14-8 先在 ...
- bzoj3767A+B Problem加强版
bzoj3767A+B Problem加强版 题意: 求两个数的和,每个数绝对值≤10^(10^7). 题解: 又用Python水过了…… 代码: a=raw_input() b=a.split() ...
- CF940E Cashback 线段树优化DP
题目描述 Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is offerin ...
- echarts 踩坑 : 为什么触摸柱状图的时后柱子不见了?原来是color的锅!
今天发现一个奇怪的问题. 当我的鼠标触摸柱状图的时候,柱状图就消失了. 后来发现是颜色的设置有问题. color: ['rgba(68,238,224)', 'rgba(17,215,255)', ' ...