OpenCup
文章平均质量分 89
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Petrozavodsk Winter-2013. Ural FU Contest Problem D. Five Palindromes manacher、一个串切割成5个回文子串、优化
manacher、一个串切割成5个回文子串、优化第一次使用manacher 嘿嘿☺☺为了方便处理奇偶的情况, 我们把 区间 [ i , j ] 的回文子串半径保存在 len[ i + j ] 里, if(len[ i + j ] >= (j - i)/2 + 1) 则[ i , j ] 为回文串可以O(n)的处理出len 所有中心的回文子串长度这里先跑一边 manacher(n) 得到 len[]数组然后O(n) 的预处理出 第一个字符串的右端点 i,放在一个队列里并且O(n) 的预处理出 最原创 2016-08-19 23:38:40 · 1474 阅读 · 2 评论 -
XVII Open Cup named after E.V. Pankratiev. Eastern Grand Prix. Problem F. Buddy Numbers 贪心、数论、构造
题意:给出一个n,问能不能把1~n这n个数排出一个序列,使得任意相邻的两个数,一个数是另一个数的因数。贪心、数论、构造1 12 2 13 3 1 24 3 1 2 4然后5的时候,也就是当1~n里素数的个数大于2的时候就不好办了,此外这里n == 6的时候还是可以构造出来了, 3 6 2 4 1 5.所以对于n == 1、2、3、4、6的时候是有答案的,直接输出即可,其它的时候都构造不出来,为-1。原创 2017-12-08 14:02:36 · 1059 阅读 · 0 评论 -
XIII Open Championship of Y.Kupala Grodno SU Grodno Problem E. Enter the Word Problem 贪心+后缀自动机
题意:这里对于生成一个字符串有2种操作,1、在末尾添加一个字母,花费代价为 1;2、在末尾添加一个substr,且该substr为已存在字符串的子串,花费代价为 1。现给出需要构造出的字符串,为最小的构造代价。贪心+后缀自动机贪心策略是 对于剩下的字符串suf,取它的最大前缀 substr,且substr是已构造出的字符串pre的子串,如果substr为空则执行操作1,否则执行操作2,这样每次都添加尽可能多的字母,所以代价是最少的。所以对于前缀pre建立后缀自动机,每次把suf丢进去匹配,其最大的原创 2017-10-06 14:10:40 · 1162 阅读 · 0 评论 -
XVII Open Cup named after E.V. Pankratiev Problem I. Rage Minimum Query 手写小根堆、卡时间+卡内存、或者随机化
题意:都是使用unsigned int 32,q个修改,每次修改一个值,并求出一个当前总区间最小值si,求 sigma{si * 10099^i mod 2^32}(1 <= i <= q),然后每次的修改操作,i和x val[i % n] = x,的i和x都是用给出的随机函数求出。 手写小根堆、卡时间+卡内存、或者随机化线段树显然很可能超时,所以想用优先队列来做,数组初始值为2^31-1,且生成的x必定小于这个值,所以可以用优先队列来记录这些值,每个元素维护<x, i> 表示当前把val[i]改成了x原创 2017-08-03 00:16:33 · 1240 阅读 · 0 评论 -
Petrozavodsk Summer Training Camp 2016 Problem I. Vier 随机化+枚举
题意:给出序列PAI[i],求是否存在a、b、c、d,使得1. a + b == c + d (mod n), and 2. PAIa + PAIb == PAIc + PAId (mod n). 随机化+枚举题目中特意描述了数据是随机均匀的,所以可以用随机化,在尽可能均匀的时间内求出答案。每次随机一个x == a + b == c + d,然后枚举判断是否存在 PAIa + PAIb == PAIc + PAId (mod n).虽然不知道怎么证明,但确实可以在比较低的时间复原创 2017-07-25 11:52:25 · 1169 阅读 · 0 评论 -
Opencup 010352 Problem 5. Autocomplete 哈希+bitset
题意:定义2个字符串如果忽略大小写则完全相同,如果区分大小写则只有不大于k个位置不同,则认为这2个字符串是“相似的”。给出w个(1<=w<=1000)个长度小于2000的模式串,然后q次询问(1<=q<=1000),每次输入一个长度小于2000的字符串问在那n个模式串中有多少个与其互为“相似的”。哈希+bitset这里2e6*(26+26)的复杂度,所以AC自动机基本上直接用不上了,如果只存小写,则虽然勉强够内存,但其实还是很可能会MLE的,并且也解决不了问题。所以想到用哈希,首先对于每个模式串在不原创 2017-05-30 20:27:45 · 1310 阅读 · 0 评论 -
Moscow Subregional 2010 Problem K. KMC Attacks 交互题、队列优化、枚举
交互题 队列优化用 lCur 和 uCur记录 机器的运行路径, 然后枚举起点就好其中WA5, 后来发现要记录最大的和最小的 lCur, uCur, 以为可能中间过程越界然后就开始TLE了尴尬后来才想到队列优化因为本来是一个vis[][]布尔数组来记录有没有枚举过那个起点, 但每次要forfor枚举然后用vis[][]判断, 这样可能是 4*1e4步内的化, 可能要接近 4*1e4 * (200 * 200) == 4* 1e8了显然还是超时的 所以队列优化可以 O(n^4)的复杂度降低到 O(原创 2016-08-10 00:16:20 · 1137 阅读 · 2 评论 -
Moscow Subregional 2010 Problem H. Hometask 转化、素数筛选
素数筛选首先 N^2 被 N!整除也就是 N 被 (N - 1)! 整除随意基本上 只要 N不是素数 就可以有除了 N 和 1以外的约束, 所以只要 是素数就是 NO此外 对于 4 由于 只有 1 2 4所以页数不满足 N 被 (N - 1)!整除, 所以4特殊处理 NO //还好谨慎,顺便打了个表, 不然4的特殊处理可能要WA了以后再发现0! 是 1 所以 N == 1也满足 1^1 被 1整除 YES复杂度 O(sqrt(n))比赛的时候代码是队友实现的, 所以向原创 2016-08-09 01:43:00 · 1087 阅读 · 0 评论 -
Moscow Subregional 2010 Problem F. Finance 读题、枚举、讨论
读题、枚举、讨论队友说题目看不懂, 然后我也去看了一段时间, 然后明白了大致意思就开始写了大概就是 明年也是放4 weeks的假期, 然后每周的工资和 那个part的假期开始前最近的52week的工作周数有关, 就定义工作了52周, 那那个part每周的带薪假就是52比如样例是输入 2 3 20 21 ,然后输出明年的计划是 1 2 3 5这里显然是2个parts, 第一个假是3 weeks, 所以这之前的52周里放假4周所以工资为 3 * (52 -4)第二个假是1 weeks 在第五周,原创 2016-08-09 00:54:09 · 1030 阅读 · 2 评论 -
Moscow Subregional 2010 Problem A. Alien Visit 计算几何、连续圆的总面积
计算几何 计算 一串可能有相交可能有相离的同半径且圆心在同一水平面的圆的总面积总共是分三类讨论 1、相交, 圆心相距比较远, 相交并且 相交部分在那个菱形里面2、相交, 圆心相距比较近, 那个菱形在相交部分里面3、相离, 外离注意一下精度然后就是 每次把相交部分算到前一个圆, 然后一次算去就好了Wrong answer, 然后对圆心排个序就通过了, 本来以为默认就是升序的, 结果是乱序的⊙﹏⊙‖∣复杂度 O(n)这个是队友代码实现的, 所以向队友 nardo 要了AC代码原创 2016-08-09 01:20:01 · 997 阅读 · 1 评论 -
Moscow Subregional 2010 Problem J. Joke 好题,卡精度卡到爆,大整数类
好题 卡精度题面很简单 就是求[ x / y ] , 但可以WA到爆,可以WA到怀疑人生, 可以WA到比赛结束, (WA了14发, 才在比赛开始后 2 : 12 Accepted ⊙﹏⊙‖∣)刚开始的方法是 把 x, y都扩大个 1e9后赋值给long long 但好像有地方溢出了, WA10然后改成 *1e4 结果 WA24, 然后改成 *1e6 WA10, 然后改成 *1e5 结果 WA28接着试着想用字符串来写, 还没有写好, 然后队友说可能爆long long了, 然后自己也想了一下, 可能原创 2016-08-09 00:34:05 · 1139 阅读 · 0 评论 -
XVII Open Cup named after E.V. Pankratiev. Eastern Grand Prix. Problem G. Gmoogle 模拟、字符串处理、文本搜索
题意:要求模拟一个搜索系统,给出文本,然后每次查询几个单词要求输出所以出现查询单词的句子。模拟、字符串处理、文本搜索先把文本预处理成一个一个单独的句子,并标号0、1、2......,并且用map<string, vector<int>>建立单词到句子的映射。然后对于每个单独查询的每个单词都会有一个集合,然后对这些集合取一个交集就是答案了。这里用到的求交集的方法是 是用一个map<int, int> check表示这些集合里每个句子出现的次数,最后遍历一遍check,出现次数为查询的单词的个数的句子原创 2017-12-08 14:25:01 · 870 阅读 · 0 评论