URAL OJ
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
URAL 1962 In Chinese Restaurant 并查集
并查集以前好像做过类似的题首先如果一个节点有sz[i] > 2 则 ans = 0如果有环, 而且不是最大的环, 则ans = 0如果是最大的环, 则ans = 2 //! 最开始误认为是1, 白白WA了2发, 然后才明白 顺时针和逆时针2种方案剩下的就是常规的ans了先是求树的全排列, // 更像是圆排列 A(n, n) / n 或者说把1的位置固定然后求全排列然后对于每个树:1)只要节点数大于1, 都会有2头无论是不是直链, 都和直链一样因为如果有2个分支, 那么那两个分支自己必须原创 2016-07-27 00:07:26 · 1197 阅读 · 1 评论 -
URAL - 1960 Palindromes and Super Abilities 回文自动机
题意:逐个字符的添加一个字符串,问每添加一个字符显存的字符串的总不同的回文子串的个数。回文树自动机首先推荐篇比较好的讲回文自动机即回文树的博客, Palindromic Tree——回文树【处理一类回文串问题的强力工具】按照功能翻译是回文自动机,按照自字面翻译是回文树。然后这题把Palindromic_Tree原来的void add成员函数,改成在出现新的回文子串的时候(!nxt[cur][c])返回1否则返回0即可。复杂度 O(n)原创 2017-03-07 22:04:53 · 774 阅读 · 0 评论 -
URAL - 1158 Censored! AC自动机+dp
题意:给出n个不同的字符,用这n个字符构成长度为m的字符串,要求每个串的子串都不出现给定的p个串中的任一个,求满足要求的字符串的个数。AC自动机+dp因为构成的最终串是由一个字符一个字符添加到字符串尾部构成的,那么如果一个串的后缀如果恰好是某个给定串的前缀时,这个串就可能最终成为非法串。用k个给定串建立AC自动机,然后从根节点开始递推,dpij表示递推到第j个字符当前在自动机上的i号节点时的方案数,如果下一个节点是k,且不是危险节点,则把dpij加到dp[k][i+1]里,跑一遍,然后答案就是所有原创 2017-01-25 15:02:15 · 1023 阅读 · 0 评论 -
URAL - 2080 Wallet 树状数组+last数组
题意:给出一个数字序列,询问当前数字在本次与下次出现的区间里的 区间数字种数。树状数组+last数组具体见 UESTC 1342 郭大侠与甲铁城 树状数组+离线操作http://blog.csdn.net/prolightsfxjh/article/details/51287461原创 2017-02-07 20:06:31 · 620 阅读 · 0 评论 -
Gym 100952H Special Palindrome 非递减的回文串、dfs打表、查数列网站OEIS
非递减的回文串、打表比赛结束后看了下public 的代码就我们队是打表过的, 别人都是正规的过的, ⊙﹏⊙‖∣尴尬分奇偶用 dfs 搞出非递减的左半边串, 然后求出这个的和 ans[sum + i]++;对于偶数个的直接dfs, 对于奇数的则枚举mid, 然后依次dfs然后只打了前ans[50] 及以前的, 因为后面的比较大时间不够的, 所以打出前50的表然后到数列网站 OEIS 查了一下, 还真有,☺☺所以把那前250个ans贴到 txt里, 然后写一个中间程序 把这些数据 转换成 printf原创 2016-08-10 01:43:40 · 2120 阅读 · 3 评论 -
URAL 2029 Towers of Hanoi Strike Back 汉诺塔,从初始状态到任意给出状态需要的次数
汉诺塔, 得到从初始状态到任意给出状态需要的次数的O(n)算法, 记结论吧☺☺比如要得到 BCCBABC则对于原始的AAAAAAA第一次令 res = ‘A', 然后对于给出的state从大的往小的开始扫, 当前是C所以第7个A变成C, ans += 2^(7 - 1), 然后res = 'B', 也就是剩余的移到B上,然后第二个需要到B上,且已经在B上, 所以不用管, 继续访问下一位然后是A, 这个时候把当期大小的盘在B上, 所以移到A上, ans += 2^(5 - 1), 然后res = ’原创 2016-07-31 01:17:56 · 1547 阅读 · 1 评论 -
URAL 2026 Dean and Schedule 贪心、双端队列(deque)、队列(queue)
贪心, 双端队列、队列先扫一遍记录各种字母出现的次数, 然后在扫一遍字母数组(从大到小),依次记录没有出现过的字母然后 扫一遍 分别记录奇数位置的'?' qo.push(i), 偶数位置的'?' qe.push(i) 同时如果'?'的个数 + 已经出现的种类数 < k 则 输出 -1否则就可以了, 然后每次 if(26 - deq.front() > deq.back()) 来判断应该填优先填 minus的位置还是 plus的位置,(同时应该先判断是否容器为空)具体见代码复杂度 O(n)原创 2016-07-31 00:44:11 · 1673 阅读 · 2 评论 -
URAL 2024 Adventure Time 思维题、Interesting
统计每个字母出现的次数, 然后从大到小排序最大的k的总个数就是 he size of the largest safe set of Darkness Rocks 然后1)如果color[k-1] != 0, 则 统计这k个里的 color[i] == color[k-1] 记为cnt1, 并统计所有的里面的color[i] == color[k-1] 记为 cnt2, 然后C[cnt2][cnt1]就是the number of different safe sets of this size.了原创 2016-07-30 23:41:27 · 905 阅读 · 0 评论 -
URAL 2025 Line Fighting 水题、贪心、均分
贪心尽可能均摊 t = n/k; res = n - t*k; 然后res个 t+1, n - res 个t, 然后算下就好了复杂度 O(n)原创 2016-07-30 23:20:56 · 924 阅读 · 0 评论 -
URAL 2035 Another Dress Rehearsal 水题、易错
虽然是水题但也WA了两发, 尴尬,第一次WA, 是对于 x > c && y > c的情况没有处理好第二次WA, 是由于 0 ≤ A ≤ X, 0 ≤ B ≤ Y 没有注意, 因为 A最大不能超过X, B 最大不能超过Y, 这个相对的就是如果 a = min(x, y) < c, 但是 max(x, y) > c, 这个时候可以 如果 y 小 则 b = y; a = c - b; 或者其实可以直接令大的为c, 然后小的为0 ☺☺原创 2016-07-30 23:10:21 · 936 阅读 · 0 评论 -
URAL 2099 Space Invader 计算几何、卡精度、好题
先判断是否有向来垂直然后判断 A到CD的距离 > B到CD的距离, 而且D到AB的距离 > C到AB的距离然后判断是否 A B在CD的两边, 以及C、D是否在AB的两边最后判断是否在一个平面, 用线性代数的方法写的很辛苦, 写到后来, 自己都怕, 万一那个地方写错, 可能短时间内不大找的出来然后就是最后判断 double 的相等的时候 把 a == b 搞错 fabs(a - b) < 1e-6 或者更精确的eps原创 2016-07-28 01:50:29 · 2025 阅读 · 7 评论 -
URAL 2098 Lada Priora 卡精度
直接算就好了这个题目的难点是精度损失1)其中有一个*p%然后求和的地方,这样每次得到一个double对象, 然后求和这样精度的损失比较严重所以应当想求和, 最后再 /100得到答案2)此外, 对于if(b >= ans/100) 这样出现浮点数的比较时, 把除的 非负数移到对面去 变成 if(b*100 >= ans)原创 2016-07-28 00:01:22 · 1675 阅读 · 2 评论 -
URAL - 1486 Equal Squares 哈希、二维hash、二分、卡大素数
题意:给出n个长度为m的字符串(n,m <= 500),然后问选取一个最大的正方形,使得有2个正方形区域的字符串是相同的,求出这个最大正方形的边长即两次出现位置的正方形左上角坐标。哈希、二维hash、二分、卡大素数题目直接就暗示着用哈希来做 ^_^,然后可以把每个字符串分别用同一个大素数hash掉,然后二分边长,check的时候,检查每个长度为mid的正方形是否再次出现,检查的时候再去另一个大素数pt,把横向的第一次哈希得到的一段字符串的哈希值作为一个元素,把这些元素再次进行哈希,然后在纵向的原创 2017-03-12 15:10:28 · 1232 阅读 · 0 评论