ttt

IOI2020集训队作业-21 (CF590E, AGC031D, AGC026E)

雨燕双飞 提交于 2019-12-29 23:20:45
A - CF590E Birthday 题意 有 n n n 个互不相同的字符串,你需要选出这些字符串的一个子集,使得这个子集内不存在两个不同的字符串 s , t s,t s , t ,满足 s s s 是 t t t 的子串。问这个子集最多能包含多少个元素,并输出方案。 n ≤ 750 n\le 750 n ≤ 7 5 0 ,字符串的长度之和不超过 1 0 7 10^7 1 0 7 。 Sol s s s 是 t t t 的子串等价于 t t t 是 s s s 的某一个前缀的后缀。由于后缀关系具有传递性( a a a 是 b b b 的后缀, b b b 是 c c c 的后缀可推出 a a a 是 c c c 的后缀),所以只需要求出所有的“ t t t 是 s s s 的某一个前缀的最长后缀”的关系,再跑一遍传递闭包就可以得到“所有的 t t t 是 s s s 的子串”的关系。 将字符串作为元素,定义偏序关系 ≤ \le ≤ 为:若 s s s 为 t t t 的子串则有 s ≤ t s\le t s ≤ t (这个定义显然满足自反性、非对称性和传递性)。若 s ≰ t s\not\le t s  ​ ≤ t 并且 t ≰ s t\not\le s t  ​ ≤ s 我们就称 s s s 和 t t t 为不可比较的。题目要求我们求的就是一个最大的子集

Gomory-Hu Tree (最小割树)

风格不统一 提交于 2019-12-25 04:08:43
Gomory-Hu Tree (最小割树) 基本定义 割 cut 对于一张带权无向图 G = ( V , E ) G=(V,E) G = ( V , E ) ,定义一个 割 (cut) 为两个集合 S , T ∈ V S,T\in V S , T ∈ V ,满足 S ∩ T = ∅ , S ∪ T = V S\cap T = \emptyset, S\cup T = V S ∩ T = ∅ , S ∪ T = V 。定义一条边为 割边 (cut edge) 当且仅当它的两个端点分别在 S S S 集合和 T T T 集合内。定义一个 割的容量 (capacity of a cut) 为所有的割边的边权的和。 定义 s-t割 (s-t cut) 为满足 s ∈ S , t ∈ T s\in S,t\in T s ∈ S , t ∈ T 的割。 流 flow 对于一张满足所有的边的容量 c ( u , v ) c(u,v) c ( u , v ) (即 u u u 到 v v v 这条边的边权)非负的带权有向图 G = ( V , E ) G=(V,E) G = ( V , E ) ,指定一个 源点 (source) 和 汇点 (sink) ,则定义它的一个 流网络 (flow network) 为一个映射 f : V × V → R f:V\times V \to R f : V ×

Codeforces Round #606 D

别等时光非礼了梦想. 提交于 2019-12-16 20:51:46
题意 大概是01串接龙,接的时候必须尾首相同。 你可以将其中的串反转,使得最后拼起来但要保证最后没有相同的。 题解 首先可以想到 真正有用的是首尾,单独拿出来可以发现只有四种状态。记录一下即可。 如果00和11都在的话, 连接的就只有00 0110 0110 01 11.这是我一开始想到的。 也就是奇数个。但实际上:00 01 11 11 11 10 01 10 01 这样无论奇数偶数都可以。 我们计算出01和10的个数相加,除以2,会存在有一个会多一个。 对于这种情况我们可以发现,不论是哪种情况多出来的一定是01。 相反以11作开头也是如此。多出来则是10。 分别考虑只有00没有11,只有11没有00. 这里我是没有考虑到的,因为一开始我只想到了00 0110 0110的顺序,所以这样子01一定是多的那个。但是实际上也可以,10 00 0110 0110,也就是10也可以是多的那个。就需要计算两次。 11的情况是类似的。 最后只剩下只有01 10的这个就是计算两次即可。因为两个都可以做多的那个。 因为需要计算多次,写一个函数即可(00和11都在的情况需要特判没有01和10.) 【注意考虑不选会导致重复的,具体做法是开个map判断一下】 # include <bits/stdc++.h> using namespace std ; string str [ 200050 ] ;

箭头函数和普通函数的区别

北城以北 提交于 2019-12-12 19:40:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 箭头函数: 最重要的一句话的理解: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。 这句话刚开始的时候非常难以理解 举个例子 var ttt = "11111111111"; var knowjiantouthis = { ttt:"2222222222222", test1:function () { //这个时候的this其实是和调用他的对象有关 console.log(this.ttt);//2222222222222 }, test2: () => { //这里面的this其实和他定义的knowjiantouthis这个对象是一起的,也就是window console.log(this.ttt);//11111111111 }, test3:function () { return ()=>{ //这里面的this和他定义时所在的对象是test3,而test3的this是指向obj的 console.log(this.ttt);//2222222222222 } } } knowjiantouthis.test1(); knowjiantouthis.test2(); knowjiantouthis.test3()(); 来源: oschina 链接: https://my

ggplot2, geom_bar, dodge, order of bars

匿名 (未验证) 提交于 2019-12-03 02:14:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'd like to have ordered bars in dodge geom_bar. Do you know how to deal with it? My code: ttt <- data.frame(typ=rep(c("main", "boks", "cuk"), 2), klaster=rep(c("1", "2"), 3), ile=c(5, 4, 6, 1, 8, 7)) ggplot()+ geom_bar(data=ttt, aes(x=klaster, y=ile, fill=typ), stat="identity", color="black", position="dodge") And example plots to better understand the problem: What I have What I would like to have 回答1: One option would be to make a new variable to represent the order the bars should be within each group and and add this variable as the

hdu6611----费用流

余生颓废 提交于 2019-11-29 22:35:37
K Subsequence 题意:给定一个长度为 \(n\) 的数字序列,现可以从中选取k个单调上升的子序列,且每个元素至多只能被选中一次,问k个子序列元素和的最大值。 题解:对数列每一项拆点,连接流量为1,费用为 \(-a[i]\) 的边,所有项的右端点与其后大于等于这一项的项的左端点连流量1,费用0的边。源点与汇点再分别与各项左右端点连边。超级源点与源点连流量k费用0的边。跑最小费用最大流。 #include <bits/stdc++.h> using namespace std; int n,k,a[2005]; typedef pair<int,int> pa; struct node{ int to,flo,cost,rev; }; int ss,s,t,tt; vector<node> gra[5000]; void add(int u,int v,int flo,int cost){ node tmp; tmp.to=v; tmp.flo=flo; tmp.cost=cost; tmp.rev=gra[v].size(); gra[u].push_back(tmp); tmp.to=u; tmp.flo=0; tmp.cost=-cost; tmp.rev=gra[u].size()-1; gra[v].push_back(tmp); } int h[5000]

B. Light bulbs(2019 ICPC上海站)

强颜欢笑 提交于 2019-11-29 17:13:07
题目描述: There are NNN light bulbs indexed from 000 to N−1N-1N−1. Initially, all of them are off.A FLIP operation switches the state of a contiguous subset of bulbs. FLIP(L,R)FLIP(L, R)FLIP(L,R) means to flip all bulbs xxx such that L≤x≤RL \leq x \leq RL≤x≤R. So for example, FLIP(3,5)FLIP(3, 5)FLIP(3,5) means to flip bulbs 333 , 444 and 555, and FLIP(5,5)FLIP(5, 5)FLIP(5,5) means to flip bulb 555.Given the value of NNN and a sequence of MMM flips, count the number of light bulbs that will be on at the end state. 输入: The first line of the input gives the number of test cases, TTT. TTT test cases

Z-Algorithm详解

混江龙づ霸主 提交于 2019-11-27 15:21:35
Z-Algorithm详解 0.前言 给你一个文本串 t t t 和一个模式串 p p p ,让你寻找 p p p 在 t t t 中出现的所以位置。 例如, t = " a b a c a b a b a c " t="abacababac" t = " a b a c a b a b a c " , p = " a b a " p="aba" p = " a b a " ,那么 p p p 在 t t t 中出现了 3 3 3 次,起始位置在 t t t 中的下标分别是 1 1 1 , 5 5 5 , 7 7 7 。 很显然可以想到 O ( ∣ t ∣ ∗ ∣ p ∣ ) O(|t|*|p|) O ( ∣ t ∣ ∗ ∣ p ∣ ) 的暴力算法,即以每一个位置为起始位置,暴力匹配每一个字符。但是如果 t t t 和 p p p 的长度都是 1 0 5 10^5 1 0 5 级别的就会超时,我们需要更高效的方法。在中国有一个 K M P KMP K M P 算法比较流行,但是我个人比较喜欢 Z − a l g o r i t h m Z-algorithm Z − a l g o r i t h m 。这里我给大家讲一下这个。 1.一些函数的定义 我们定义 z i ( s ) z_i(s) z i ​ ( s ) 为对于所有的 2 ≤ i ≤ ∣ s ∣ 2 \leq i