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的更多相关文章

  1. WordPress Platinum SEO插件跨站脚本漏洞

    漏洞名称: WordPress Platinum SEO插件跨站脚本漏洞 CNNVD编号: CNNVD-201309-398 发布时间: 2013-09-24 更新时间: 2013-09-24 危害等 ...

  2. NDK下 将Platinum SDK 编译成so库 (android - upnp)

    Platinum UPnP SDK 是一个跨平台的C++库,利用该库,可以很容易就构建出DLNA/UPnP控制点(DLNA/UPnP Control Point)和DLNA/UPnP设备(DLNA/U ...

  3. 基于Platinum库的DMS实现(android)

    接上篇博文:基于Platinum库的DMR实现(android) 文章讲述了如何使用Platinum库实现DMR 今天同样使用该库,来讲解一下DMS的实现 关于该库如何编译,请参考这篇博文:NDK下 ...

  4. 关于Platinum库的MediaRender具体C++代码实现探讨

    接上篇博文 NDK下 将Platinum SDK 编译成so库 (android - upnp) 讲述了如何利用该代码库编译给android程序调用的so库,其中也提到了,在使用sample-upnp ...

  5. Usaco 2019 Jan Platinum

    Usaco 2019 Jan Platinum 要不是昨天老师给我们考了这套题,我都不知道usaco还有铂金这么一级. 插播一则新闻:杨神坚持认为铂金比黄金简单,原因竟是:铜 汞 银 铂 金(金属活动 ...

  6. Platinum UPnP

    http://www.plutinosoft.com/platinum http://blog.csdn.net/lancees/article/details/9178385 Note that P ...

  7. [转帖]56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装

    56核Xeon Platinum 9200现身 - 英特尔有史以来最大的CPU封装 https://www.cnbeta.com/articles/tech/835271.htm 当英特尔宣布上周正式 ...

  8. bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解

    辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <io ...

  9. USACO 2015 December Contest, Platinum Problem Max Flow【树链剖分】

    题意比较难理解,就是给你n个点的树,然后给你m个修改操作,每一次修改包括一个点对(x, y),意味着将x到y所有的点权值加一,最后问你整个树上的点权最大是多少. 比较裸的树链剖分了,感谢Haild的讲 ...

随机推荐

  1. 力扣 ——Remove Duplicates from Sorted List II(删除排序链表中的重复元素 II)python实现

    题目描述: 中文: 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4-> ...

  2. jQuery 实现表格变色效果

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  3. linux rsync 复制文件忽略文件夹

    比如: /home/vagrant/test 目录下有 a,b,c 三个文件夹,只复制 c 文件夹下面的文件到/home/vagrant/test2 下 使用cp命令复制的时候,只能排除一个目录不被复 ...

  4. 关于Linux_监控系统资源/性能命令_vmstat

    (系统资源查看命令-vmstat[监控系统资源命令])          command:vmstat  [刷新延时 刷新次数]   分解解析: procs:进程信息字段:              ...

  5. java基础学习笔记六(继承)

    继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父 ...

  6. BlueStore-先进的用户态文件系统《二》-BlueFS

    https://zhuanlan.zhihu.com/p/46362124 简介 上一篇文章中,介绍了BlueStore的诞生背景.逻辑架构以及设计思想,提到了在BlueStore中元数据都是存放在R ...

  7. Arrays(一)二次封装自己的数组

    一.二次封装自己的数组 目标:设计int 类型数组, (1)可以根据用户传入的容量设置数组的长度,如果用户未设置容量,默认设置长度为10(考虑使用多态性) (2)判断数组是否为空 (3)获取数组的容量 ...

  8. QC增加Test、Defect字段

    QC--Tools--customization,在Project Entities中增加字段,在Project Lists中编辑Lookup List类型字段的指定值

  9. 远程到Server系统安装和使用QTP

    转自http://www.51testing.com/html/40/307440-832446.html  感谢作者 多童鞋都问在2003上如何安装QTP,为何单机许可不能使用? 我在N太serve ...

  10. php对接极光推送

    首先要明白php对接极光推送要做些什么,极光推送的大致流程是:你的服务器----->极光服务器------>app端.而php要做的就只有我们的服务器到极光服务器这个过程.极光服务器到ap ...