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 ...
随机推荐
- web页面弹出遮罩层,通过js或css禁止蒙层底部页面跟随滚动
场景概述 弹窗是一种常见的交互方式,而蒙层是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互.但是,在蒙层元素中滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始滚动,显然这 ...
- java 面向对象(二十四):interface:接口
interface:接口1.使用说明: 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能 ...
- SQLAlchemy02 /SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...
- C语言笔记、文件io的操作
一个自己定义的头文件: 文件名为 xxx.h 内容: #ifndef _MYHEAD_H #define _MYHEAD_H #include<stdio.h>#include< ...
- 【一起学系列】之模板方法:写SSO我只要5分钟
意图 定义一个操作中的算法的骨架,将一些步骤延迟到子类中. Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 模板方法模式的诞生 模板方法模式为我们提供了一 ...
- Bash 脚本编程
概述 Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell. shell语法 变量 定义:your_name="hellohhy" 使 ...
- CUDA中关于C++特性的限制
CUDA中关于C++特性的限制 CUDA官方文档中对C++语言的支持和限制,懒得每次看英文文档,自己尝试翻译一下(没有放lambda表达式的相关内容,太过于复杂,我选择不用).官方文档https:// ...
- 用scratch编程大炮打幽灵
首先来看看效果: 是不是很炫酷呢?想知道具体程序的话请关注微信公众号!
- 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)
图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...
- jmeter接口测试 -- status==400(Bad Request)
一.接口请求信息 二.错误的jmeter接口请求 1.请求内容 2.响应内容 三.正确的接口请求 1.看回原本的接口请求信息,company_id = null .这里也就不能空 四.原因分析 1. ...