USACO18DEC Platinum
standing out from the field
给你n个串,对于每个串求出只包含在这个串中的本质不同的子串?
后缀自动机,建树,对于每一个点打上包含在哪个串中的标记。
叶子都是前缀,直接在sam_build时预处理;其余的dfs一遍,由于x是son[x]的后缀,故x的状态由son[x]影响,如果son[x]有出现在不同串中的,标记x为-1。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=;
char s[N+];
int last,sc,p,np,l[N],son[N][],fa[N],cnt,head[N],f[N];
ll ans[N];
struct node{int to,next;}num[N];
void add(int x,int y)
{num[++cnt].to=y;num[cnt].next=head[x];head[x]=cnt;}
void Sam(int c,int id)
{
p=last; np=last=++sc; l[np]=l[p]+;
for (;p&&!son[p][c];p=fa[p]) son[p][c]=np;
if (!p) fa[np]=;
else {
int q=son[p][c];
if (l[p]+==l[q]) fa[np]=q;
else {
int nq=++sc; l[nq]=l[p]+;
memcpy(son[nq],son[q],sizeof(son[q]));
fa[nq]=fa[q];fa[q]=fa[np]=nq;
for (;son[p][c]==q;p=fa[p]) son[p][c]=nq;
}
}
if (f[np]&&f[np]!=id) f[np]=-;else f[np]=id;//处理叶子及一部分为前缀的非叶子
}
void dfs(int x)
{
for (int i=head[x];i;i=num[i].next)
if (num[i].to!=fa[x]) dfs(num[i].to);
if (f[x]&&f[x]!=-) ans[f[x]]+=l[x]-l[fa[x]];
if (f[fa[x]]&&f[fa[x]]!=f[x]) f[fa[x]]=-;else f[fa[x]]=f[x];
}
int main()
{
int T;scanf("%d",&T);
sc=;
for (int i=;i<=T;i++)
{
scanf("%s",s+); int sl=strlen(s+);
last=;
for (int j=;j<=sl;j++) Sam(s[j]-'a',i);
}
for (int i=;i<=sc;i++) add(fa[i],i);
dfs();
for (int i=;i<=T;i++) printf("%lld\n",ans[i]);
return ;
}
push a box
f[x][y][dir]表示箱子在(x,y)格子,人是否可在箱子的dir方向。
两种操作:推箱子,走人。“推箱子”可以用bfs处理,我们将箱子推过去的时候,必然有一个dir是可行的,“走人”就相当于是判断dir是否可以转换,具体地,从dir1的位置是否有一条不经过箱子所在点的路径走到dir2。tarjan点双,建成圆方树,存在路径当且仅当两个点的距离为2且经过一个方点。
greedy gift takers
每次在首位的人拿到礼物会排到倒数a[i]个人前。问无限次操作,有多少人获得礼物?n<=1e5。
拿到礼物的人在原序列中一定是连续的一段。从封闭性的角度考虑,令a[i]=n-a[i],如果前缀M个人均有a[i]<=M,那么其他人一定不会拿到礼物。我们在前M个人中丢掉a[i]最大的一个,如果剩下的M-1个人的max_a[i]<=M-1,同理其他人拿不到礼物……具有二分性,每次如上check。
#include<bits/stdc++.h>
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
const int N=1e5+;
multiset<int,greater<int> > s;
int l,r,n,a[N],ans;
bool check(int x)
{
s.clear();
for (int i=;i<=x;i++) s.insert(a[i]);
for (int i=x;i>=;i--)
if (*s.begin()<=i) return ;
else s.erase(s.begin());
return ;
}
int main()
{
n=read();
for (int i=;i<=n;i++) a[i]=n-read();
l=;r=n;
while (l<=r)
{
int mid=(l+r)/;
if (check(mid)) ans=mid,r=mid-;else l=mid+;
}
printf("%d\n",n-ans);
return ;
}
USACO18DEC Platinum的更多相关文章
- WordPress Platinum SEO插件跨站脚本漏洞
漏洞名称: WordPress Platinum SEO插件跨站脚本漏洞 CNNVD编号: CNNVD-201309-398 发布时间: 2013-09-24 更新时间: 2013-09-24 危害等 ...
- NDK下 将Platinum SDK 编译成so库 (android - upnp)
Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...
- 基于Platinum库的DMS实现(android)
接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...
- 关于Platinum库的MediaRender具体C++代码实现探讨
接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp) 讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp ...
- Usaco 2019 Jan Platinum
Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...
- Platinum UPnP
http://www.plutinosoft.com/platinum http://blog.csdn.net/lancees/article/details/9178385 Note that P ...
- [转帖]56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装
56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装 https://www.cnbeta.com/articles/tech/835271.htm 当英特尔宣布上周正式 ...
- bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解
辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <io ...
- USACO 2015 December Contest, Platinum Problem Max Flow【树链剖分】
题意比较难理解,就是给你n个点的树,然后给你m个修改操作,每一次修改包括一个点对(x, y),意味着将x到y所有的点权值加一,最后问你整个树上的点权最大是多少. 比较裸的树链剖分了,感谢Haild的讲 ...
随机推荐
- Codeforces 360E 贪心 最短路
题意及思路:https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下,如果第一个人能比第二个人先到,那就缩 ...
- 力扣——Partition List(分隔链表) python实现
题目描述: 中文: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = ...
- jQuery 实现表格变色效果
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- spring boot poi 导出Excel
public class ExcelData implements Serializable { private static final long serialVersionUID = 444401 ...
- 手写Spring事务框架
Spring事务基于AOP环绕通知和异常通知 编程事务 声明事务 Spring事务底层使用编程事务+AOP进行包装的 = 声明事务 AOP应用场景: 事务 权限 参数验证 什么是AOP技术 AO ...
- 每天一个linux命令:cat(10)
cat cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用 注意:当文件较大时,文本在屏幕上迅速 ...
- PyCharm 默认快捷键
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完 ...
- IDEA入门使用--二
*)IDEA安装和破解:https://www.cnblogs.com/jajian/p/7989032.html 这次我安装的是最新版2019的IDEA *)导入项目时,根据提示,一步步来.其 ...
- Data Transfer Objects in abp
https://aspnetboilerplate.com/Pages/Documents/Data-Transfer-Objects Data Transfer Objects are used t ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...