随笔分类 -  opencup

摘要:给你一个字符串,多次区间询问,问你在该区间内最多能有几个easy重复的子序列。 显然如果只有一次询问,从左到右贪心做即可。 分块,预处理任意两块间的答案,不过要把以e a s y开头的四个答案都处理出来。① 然后再预处理每个点到该点所在块右端点的答案,不过只用考虑e开头的。② 询问的时候,分成三部分 阅读全文
posted @ 2017-08-24 11:44 AutSky_JadeK 阅读(136) 评论(0) 推荐(0)
摘要:题意:给你一棵树,每个点有一个左括号或者右括号,问你树上能够完美匹配的路径数量(l->r,r->l 视作不同路径)。 点分治可以使用“不扣去重复答案”的写法,只不过,要先将每个点的子树按照从小到大的顺序排序,防止复杂度出错。(此题不需要,因为统计一个子树的贡献的时候,时间复杂度最多只与当前子树的大小 阅读全文
posted @ 2017-08-22 01:22 AutSky_JadeK 阅读(217) 评论(0) 推荐(0)
摘要:一开始有n个杯子,每个杯子里有一些豆子,两个人轮流操作,每次只能将一个豆子移动到其所在杯子之前的某个杯子里,不过可以移动到的范围只有一段区间。问你是否先手必胜。 一个杯子里的豆子全都等价的,因为sg函数是异或起来的值,所以一个杯子里如果有偶数个豆子,就没有意义。 用sg(i)表示i杯子中的豆子的sg 阅读全文
posted @ 2017-08-16 23:52 AutSky_JadeK 阅读(318) 评论(0) 推荐(0)
摘要:这份代码可以作为找割边的模板。割边分割出来的部分是无向图的 边-双连通分量。 平面上2*n+1个点,在同一横坐标上的点之间可以任意两两匹配。同一纵坐标上的点之间也可以。问你对于所有的点i,输出i被移除之后,剩余的点能否完美匹配。 把x坐标当一列点,y坐标当一列点,原本的点当做边,建出来一个二分图。 阅读全文
posted @ 2017-08-16 23:45 AutSky_JadeK 阅读(391) 评论(0) 推荐(0)
摘要:一个矩阵,每个位置有一个非负整数,一个人从左上走到右下,不能走重复的格子,问得到的最大权值。 当长宽不都为偶数时,必然能走遍所有格子,横着从左到右,从右到左(或是竖着走)走完即可。 当长宽都是偶数时,必然只有一个格子走不到,黑白染色后,就是白色格子中的最小值走不到,别的全都可以走得到。 两行两行地走 阅读全文
posted @ 2017-08-16 23:35 AutSky_JadeK 阅读(301) 评论(0) 推荐(0)
摘要:有一些草,一开始高度都是0,它们的生长速率不同。 给你一些单增的日期,在这些日期要将>b的草的部分都割掉,问你每次割掉的部分有多少。 将草的生长速率从大到小排序,这样每次割掉的是一个后缀,而且不会影响它们生长速率的递增性。 就是三种操作,一种对一个后缀赋值,一种对整个数组作 + 另一个数组(d(i) 阅读全文
posted @ 2017-08-09 19:57 AutSky_JadeK 阅读(422) 评论(0) 推荐(0)
摘要:平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形。 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调的,可以用一个pointer做出来,然后可以得出那些同方向的向量的区间(这个代码好像有点问题,可能会 阅读全文
posted @ 2017-08-09 19:51 AutSky_JadeK 阅读(340) 评论(0) 推荐(0)
摘要:f(n)定义为n的十进制表示下所有位的平方和。 问你方程K*f(n)=n在a<=n<=b中的解的个数。 发现f(n)最大不超过2000,可以直接枚举f(n),然后判断K*f(n)的位的平方和是否恰好为f(n)。 阅读全文
posted @ 2017-08-09 19:45 AutSky_JadeK 阅读(307) 评论(0) 推荐(0)
摘要:给你一个网格(n<=2000,m<=2000),有一些炸弹,你可以选择一个空的位置,再放一个炸弹并将其引爆,一个炸弹爆炸后,其所在行和列的所有炸弹都会爆炸,连锁反应。 问你所能引爆的最多炸弹数。 转化成: 将行列当成点,炸弹当成边,然后你可以给这个二分图加1条边,问你最大的连通块的边的数量。 可以通 阅读全文
posted @ 2017-08-04 21:16 AutSky_JadeK 阅读(464) 评论(0) 推荐(0)
摘要:有两辆车,容量都为K,有n(10w)个人被划分成m(2k)组,依次上车,每个人上车花一秒。每一组的人都要上同一辆车,一辆车的等待时间是其停留时间*其载的人数,问最小的两辆车的总等待时间。 是f(i,j)表示前i组,j个人是否可行。w(i)表示第i组的人数。 if f(i,j)==1 then f(i 阅读全文
posted @ 2017-08-04 20:57 AutSky_JadeK 阅读(198) 评论(0) 推荐(0)
摘要:给你n个字符串,问你最小的长度的前缀,使得每个字符串任意循环滑动之后,这些前缀都两两不同。 二分答案mid之后,将每个字符串长度为mid的循环子串都哈希出来,相当于对每个字符串,找一个与其他字符串所选定的子串不同的子串,是个二分图最大匹配的模型,可以匈牙利或者Dinic跑最大流看是否满流。 一个小优 阅读全文
posted @ 2017-08-04 20:35 AutSky_JadeK 阅读(225) 评论(0) 推荐(0)
摘要:给你一个n*m的字符矩阵,将横向(或纵向)全部裂开,然后以任意顺序首尾相接,然后再从中间任意位置切开,问你能构成的字典序最大的字符串。 以横向切开为例,纵向类似。 将所有横排从大到小排序,枚举最后切开的位置在哪一横排,将这一排提到排序后的字符串数组最前面,求个“最大表示法”,如果最大表示法的位置恰好 阅读全文
posted @ 2017-08-04 20:29 AutSky_JadeK 阅读(169) 评论(0) 推荐(0)
摘要:给你n,K,问你要选出最少几个长度为2的K进制数,才能让所有的n位K进制数删除n-2个元素后,所剩余的长度为2的子序列至少有一个是你所选定的。 如果n>K,那么根据抽屉原理,对于所有n位K进制数,必然会至少有1个数字出现2次或以上,所以00,11,...,K-1 K-1这样的数对是必选的。 对于其他 阅读全文
posted @ 2017-08-04 20:19 AutSky_JadeK 阅读(221) 评论(0) 推荐(0)
摘要:给你一行房间,有的是隐身药水,有的是守卫,有的是金币。 你可以任选起点,向右走,每经过一个药水或金币就拿走,每经过一个守卫必须消耗1个药水,问你最多得几个金币。 药水看成左括号,守卫看成右括号, 就从每个位置贪心地向右走,如果在 r 遇到不匹配,则把下一次的左端点置成r+1,接着走。 O(n)即可。 阅读全文
posted @ 2017-08-04 20:11 AutSky_JadeK 阅读(254) 评论(0) 推荐(0)
摘要:假设一个数有n个质因子a1,a2,..,an,那么n'=Σ(a1*a2*...*an)/ai。 打个表出来,发现一个数x,如果x'=Kx,那么x一定由K个“基础因子”组成。 这些基础因子是2^2,3^3,5^5,7^7,11^11,13^13。只有6个,K不超过30,于是可以dfs。 要注意搜索顺序 阅读全文
posted @ 2017-08-04 20:07 AutSky_JadeK 阅读(183) 评论(0) 推荐(0)
摘要:1000w的数组,一开始都是2^31-1,然后经过5*10^7次随机位置的随机修改,问你每次的全局最小值。 有效的随机修改的期望次数很少,只有当修改到的位置恰好是当前最小值的位置时才需要扫一下更新最小值。 分个块或者直接暴力都可以。 阅读全文
posted @ 2017-08-02 19:47 AutSky_JadeK 阅读(197) 评论(0) 推荐(0)
摘要:给你一个1~n的排列,让你找出4个下标a b c d,满足 (a+b)%n=(c+d)%n (w(a)+w(b))%n=(w(c)+w(d))%n,并且是非平凡解。 发现对于每个数i,找出两个数和为其的数量大概是O(n),于是可以随机找,压到vector里存下,直到找到一个解为止。 阅读全文
posted @ 2017-07-23 22:45 AutSky_JadeK 阅读(328) 评论(0) 推荐(0)
摘要:发现由于角的度数和边的长度有限制,那俩圆如果放得下的话,必然是塞在两个角里。 于是预处理n个圆心的位置(注意要判断那个圆会不会和其他的边界相交),然后n^2枚举俩角即可。 阅读全文
posted @ 2017-07-18 01:03 AutSky_JadeK 阅读(299) 评论(0) 推荐(0)
摘要:那个人派出的队伍的行走的路径一定前半程是重合的,后半程分叉开来。 于是预处理每个点离1号点的最短路,到最近的铁的最短路,到最近的煤的最短路。(三次BFS / SPFA)然后枚举分岔点,尝试更新答案即可。 阅读全文
posted @ 2017-07-18 01:00 AutSky_JadeK 阅读(165) 评论(0) 推荐(0)
摘要:二分Vx即可。 阅读全文
posted @ 2017-07-18 00:57 AutSky_JadeK 阅读(217) 评论(0) 推荐(0)

TVアニメ「Charlotte(シャーロット)」公式サイト TVアニメ「Charlotte(シャーロット)」公式サイト