安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告
[POI2010]CHO-Hamsters
题意:
给出n个互不包含的字符串,要求你求出一个最短的字符串S,使得这n个字符串在S中总共至少出现m次,问S最短是多少?
范围:
\(1 \le n \le 200,1 \le m \le 10^9\),\(\sum_S \le 100000\)
图论模型,矩阵乘法优化floyd
首先虚点连字符串,边权为长度,然后字符串相互连接,边权为后者长度-最长公共部分
前后匹配的方法比较多,hash,kmp,AC自动机都行
然后很容易找到一个floyd的方法
我们利用矩阵快速幂进行优化就行了
Code:
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define ll long long
ll min(ll x,ll y){return x<y?x:y;}
const int N=202;
int n,m;
struct matrix
{
ll dx[N][N];
matrix()
{
memset(dx,0x3f,sizeof(dx));
}
matrix friend operator *(matrix n1,matrix n2)
{
matrix n3;
for(int k=0;k<=n;k++)
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
n3.dx[i][j]=min(n3.dx[i][j],n1.dx[i][k]+n2.dx[k][j]);
return n3;
}
}x,f;
char name[100010];
const ll base=26,mod=19260817;
ll g[N][N],pow[100010];
vector <ll> has[N];
ll get_hash(int id,int l,int r)
{
return ((has[id][r]-has[id][l-1]*pow[r+1-l])%mod+mod)%mod;
}
ll cal(int i,int j)
{
int l1=x.dx[0][i],l2=x.dx[0][j];
for(int k=min(l1,l2)-1;k;k--)
if(get_hash(i,l1-k+1,l1)==get_hash(j,1,k)) return k;
return 0;
}
void init()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",name+1);
int len=strlen(name+1);
x.dx[0][i]=len;
has[i].push_back(0);
for(int j=1;j<=len;j++)
has[i].push_back(has[i][j-1]*base%mod+name[j]-'a');
}
pow[0]=1;
for(int i=1;i<=100000;i++)
pow[i]=pow[i-1]*base%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
x.dx[i][j]=x.dx[0][j]-cal(i,j);
}
void work()
{
--m;
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
f.dx[i][j]=x.dx[i][j];
while(m)
{
if(m&1) f=f*x;
x=x*x;
m>>=1;
}
ll ans=0x7fffffffffffffffll;
for(int i=1;i<=n;i++)
ans=min(ans,f.dx[0][i]);
printf("%lld\n",ans);
}
int main()
{
init();
work();
return 0;
}
2018.8.18
安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告的更多相关文章
- 安徽师大附中%你赛day9 T3 贵 解题报告
贵 问题描述 苟先生的狼狗大军没有追上富先生, 所以他把它们都解雇了, 决定去雇佣一些更好的狗, 不过狗可是很贵的.苟先生有 \(w\) 元钱, 有 \(n\) 条狗可以雇佣, 第 \(i\) 条狗有 ...
- 安徽师大附中%你赛day5 T3 树上行走 解题报告
树上行走 题目背景 \(\mathrm{Smart}\) 的脑洞非常大, 经常幻想出一些奇怪的东西. 题目描述 某一天,\(\mathrm{Smart}\) 幻想出了一棵没有边际的二叉树,脑补着在那棵 ...
- 安徽师大附中%你赛day3T1 怜香惜玉 解题报告
怜香惜玉 题意: 已知 \(f(x)=\frac{2 \times \sum_{(i,x)=1}^x i}{φ(x)}\) 先给定数据组数\(t\)和\(k\) 每组数据给出\(n\),求\(\sum ...
- 安徽师大附中%你赛day2T3 巧克力 解题报告
巧克力 题目描述 小\(T\)有\(N\)块巧克力, 每块巧克力上都有一句话(由小写英文字母组成,不含标点) .现在每块巧克力都断成了若干截,更糟糕的是,有一些碎片丢失了 ,但是剩下的碎片之间的顺序是 ...
- 安徽师大附中%你赛day9 T2 富 解题报告
富 题目背景 出于某些原因, 苟先生在追杀富先生. 题目描述 富先生所在的地方是一个\(n\times m\)的网格,苟先生排出了他的狼狗大军,共有\(k\)条狗,第\(i\)条狗所在的位置为\((x ...
- 安徽师大附中%你赛day7 T2 乘积 解题报告
乘积 题目背景 \(\mathrm{Smart}\) 最近在潜心研究数学, 他发现了一类很有趣的数字, 叫做无平方因子数. 也就是这一类数字不能够被任意一个质数的平方整除, 比如\(6\).\(7\) ...
- 安徽师大附中%你赛day4T2 演讲解题报告
演讲 题目背景: 众所周知,\(\mathrm{Zdrcl}\)是一名天天\(\mathrm{AK}\)的高水平选手. 作为一民长者,为了向大家讲述自己\(\mathrm{AK}\)的经验,他决定在一 ...
- 安徽师大附中%你赛day4T1 金字塔 解题报告
金字塔 题目背景: \(Zdrcl\)带着妹子们来到了胡夫金字塔周边旅游, 发现这里正在进行一个有关金字塔的游戏 题目描述: 游戏规则如下: 1. 这里的金字塔是一个 \(N\) 阶的二维金字塔. 2 ...
- SCNU 2015ACM新生赛初赛【1006. 3D打印】解题报告
题目链接详见SCNU 2015新生网络赛 1006. 3D打印 .出题思路来自codevs 3288. 积木大赛,属于模拟题. 首先我们把“选择从第L部分到第R部分”理 ...
随机推荐
- mongo数据库相关目录
mongodb的docker化安装 mongodb的windows系统下安装 grafana使用Prometheus数据源监控mongo数据库 mongodb副本集的docker化安装 mongodb ...
- linux c 出错集
2018.7.8 1.声明结构体时,结构体内部不能赋值.比如 struct student{ char id=0; char score=0; }; 这样大错特错! 2.字符数组 char a[10] ...
- 【转】Django添加静态文件设置
STATIC_URL = '/statics/'STATIC_ROOT= os.path.join(BASE_DIR, 'statics')STATICFILES_DIRS = ( os.path.j ...
- SpringCloud项目,接口调用返回http 500 - Internal Server Error的错误
今天上班的时候,自己正在参与的Spring Cloud项目出现了问题,原本上周五还正常的项目突然所有接口调用都是返回http 500的错误. 项目的状态是在Eureka上可以看到对应微服务是在线状态, ...
- python的正则表达一
一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...
- 实用脚本 4 -- Makefile(不同文件下的多个可执行文件or静态库编译到同一目录下)
不同文件下的多个可执行文件编译到同一目录下,这样方便观察编译结果,从而方便进程操作.使用时根据自己的需要在进行局部修改(如 链接库.目标文件等等). 1..bashrc 中设置编译主目录(例如) ex ...
- luogu4238 【模板】多项式求逆
ref #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int ...
- Android应用开发中的夜间模式实现(一)
前言 在应用开发中会经常遇到要求实现夜间模式或者主题切换具体例子如下,我会先讲解第一种方法. 夜间模式 知乎 网易新闻 沪江开心词场 Pocket 主题切换 腾讯QQ 新浪微博 我今天主要是详述第一种 ...
- zabbix 2.2 调小监控值
zabbix_agent默认disk下小于0%告警 调小到5% 组态 > 模板 选择需要的模板的触发器 例如 Template OS Windows 选择触发器 - 探索规则 - 触发器类型 ...
- Python升级3.6 强力Django+Xadmin打造在线教育平台
第 1 章 课程介绍 1-1 项目演示和课程介绍: 第 2 章 Windows下搭建开发环境 2-1 Pycharm.Navicat和Python解释器的安装: Pycharmhttp://www.j ...