UESTC 2016 Summer Training
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
UVALive 5971 Permutation Counting 组合学、递推
反正枚举全排列必定TLE的, 然后排列组合里面其实递推挺多的, 也可以搞出前几项, 然后去 数列网站上查一下这里的递推式是 dp[i] = dp[i - 1] * (i - 1) + dp[i - 2] * (i - 2)这里dp[i] 表示 n == i 时合法的排列数1)对于 dp[i - 1] * (i - 1) 则是对于 n == i - 1的合法排列, 可以在 (i - 1)个地方把第i个数插进去就好了, 总共 (i - 1 + 1) - 1个位置;2)对于dp[i - 2] * (i -原创 2016-07-22 22:57:14 · 1290 阅读 · 0 评论 -
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 评论 -
UESTC 1170 红与蓝 计算几何、贪心、红蓝点对
贪心的做法预处理所有Ai到O的距离, 然后根据距离排序, 之后依次对每个Bi也求出BiO, 然后二分查找, 然后处理最近的+-100个点, 答案必定在这100或者1000个点之内比赛的时候是+-100 共200个点Accepted的然后比赛结束后试了一下, 我这样的方法至少要+-40 共80个点才能通过那个题目的数据测试好像还有专业计算几何的算法 红蓝点对 ☺☺原创 2016-07-28 22:11:54 · 1671 阅读 · 1 评论 -
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 评论 -
UVALive 6915 Leveling Ground 优先队列+map来维护区间最值
//!!!!!! 这个UVALive 的题, 由于少了最后一个换行/*if(T) printf("\n") 或者说 if(kase < T) printf("\n") */, WA了不知道多少发⊙﹏⊙‖∣, 然后把那句代码去掉然后过了,太坑了把那些花费都 *2, 最后在ans/2.0类似于Two Pointers的思想维护区间的sum, 然后移动的时候加上右边多出的一个, 减点左边少掉的那个然后用优先队列维护区间最值 priority_queue<pair<ll,ll>,vector<pair原创 2016-08-03 23:45:47 · 732 阅读 · 0 评论 -
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 · 1454 阅读 · 2 评论 -
Gym 100952E E. Arrange Teams dfs、剪枝
dfs、剪枝首先用 pai[][]布尔数组双向的记录 那些 pair然后void dfs(int k) 表示当前正在处理 队伍 k, 然后遍历 所有 i, j 如果没有访问过, 并且满足条件 则dfs(k + 1)直到顺利的把所以的t个队伍都填进去了, 那一个分枝才ans++; return;剪枝以后的复杂度不大算的出来, 嘿嘿, 但看数据大小 (1 ≤ n,m ≤ 11) and (1 ≤ t ≤ 10) 这样做一般可以pass the tests原创 2016-08-11 01:14:29 · 1009 阅读 · 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 评论 -
Gym 100952D Time to go back 组合学、杨辉三角预处理组合数
组合学有 n 个礼物, m个朋友, 其中k 个很要好的朋友, 要买 price 大于 d 的礼物领 price >= d 的礼物个数为 cnt则如果用 C[cnt][k] * C[n - k][m - k] 则显然不对, 因为这里面前面选的 price >= d的, 后面给普通好朋友选礼物的时候也会选到, 这样总的买的礼物数来说有大量重复了所以 应该是分步 分类(price >= d 的与 < d 的分开算, 这样就不会相同的礼物选2次了)首先 C[cnt][k] * C[n原创 2016-08-10 01:16:49 · 1848 阅读 · 2 评论 -
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 · 1110 阅读 · 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 · 1075 阅读 · 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 · 1022 阅读 · 2 评论 -
Moscow Subregional 2010 Problem A. Alien Visit 计算几何、连续圆的总面积
计算几何 计算 一串可能有相交可能有相离的同半径且圆心在同一水平面的圆的总面积总共是分三类讨论 1、相交, 圆心相距比较远, 相交并且 相交部分在那个菱形里面2、相交, 圆心相距比较近, 那个菱形在相交部分里面3、相离, 外离注意一下精度然后就是 每次把相交部分算到前一个圆, 然后一次算去就好了Wrong answer, 然后对圆心排个序就通过了, 本来以为默认就是升序的, 结果是乱序的⊙﹏⊙‖∣复杂度 O(n)这个是队友代码实现的, 所以向队友 nardo 要了AC代码原创 2016-08-09 01:20:01 · 984 阅读 · 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 · 1124 阅读 · 0 评论 -
UESTC 2016 Summer Training #4 Div.2 B - ฅ(*`ω´*)ฅ 有趣的思维题
读懂题意很重要嘿嘿, 就是先每个1个数删去一个数, 然后 在剩余的数字里 每隔2个数删除一个数, 然后又在剩余的数里每隔3个数删除一个数, 一次类推反正笔者自己觉得这个题挺有意思的,嘿嘿^_^原创 2016-07-17 23:21:12 · 1229 阅读 · 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 评论 -
UESTC 2016 Summer Training #2 Div.2 A dp、递推、多阶段问题
训练的时候刚开始想到的是记忆化搜索, 但无论怎么优化还是TLE 3,没办法,想想递推怎么写但是转化方程还是有点小问题, WA5然后后来才想明白只要 dp[i][j] = max(dp[i+1][j], dp[i][j+1]) + s[i][j]; if(dp[i][j] > 0) dp[i][j] = 0;这里不要讨论s[i][j]的正负,都是直接加上s[i][j]就好了然后处理好边界就好了dp检查的时候应当着重与转移方程啊⊙﹏⊙‖∣原创 2016-07-13 00:59:18 · 1376 阅读 · 0 评论 -
UESTC 2016 Summer Training #2 Div.2 E 分解质因素(除了以后剩下的可能也是个素数)
分解质因数, 至少有三个不同的质因数的数是lucky number, 用修改分解质因数的模版, 是只记录质因数个数就好,不用管是什么而且不同质因数个数大于等于3就return 3用的分解质因素模版不知道为什么会WA, 改成 2~n, 暴力试除来分解质因数倒是可以⊙﹏⊙‖∣原因, 对于2~sqrt(n)+1, 可能有剩余的大于 sqrt(n) +1的素数, 也就是还有大于sqrt(n)+1 的质因数, 所以试除全部的2~n比较好//刚开始做的时候, 看成了,只能有三个不同质数构成的数, 然后就搞出个素数原创 2016-07-12 22:44:38 · 1209 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 J - Objects Panel (A) dfs、按条件遍历树、interesting
dfs, 用前向星存储树状结构然后根据条件遍历, 然后根据要求输出就好了然后这个题目的数据是有问题的 The state of objects that do not have any nested objects will be '-'.因此叶子必然为 '-', 不可能出现 + 0 这样的数据, 但是test 7好像就是这样的数据, 虽然据说是Codeforces的题, 但确实数据是有问题的这样导致 先判断是否为 +-再在 '-'的情况下讨论 是否为叶子 WA7题目中那么必须 先判断是否为原创 2016-07-12 22:00:57 · 1603 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 H - Queue (A) 贪心
贪心每次找钱,都是优先使用 大票, 因为小票具有大额票的所有功能, 而且具有大额票所不具有的功能, 所以每次优先使用大额飘//由于用了自己的一键测试多组数据的版//!前面有些数据没有重置, 白白检查了这么长时间(┬_┬)原创 2016-07-12 21:44:55 · 1661 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 L - Plus or Minus (A) dfs
dfs就好, 好久没用写dfs了,简单dfs还是Debug了好长时间, 尴尬⊙﹏⊙‖∣记得把那些转移的东西写在参数里读入char类型, 记得看看要不要用getchar吸掉换行空格什么的原创 2016-07-12 21:32:05 · 1550 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 E - Accepted Passwords 讨论
看清楚题目就好了 or if the user’s password length is at least 8 characters and the user made a mistake with only one character (either replaced it with a wrong character or dropped it).然后讨论一下就好了原创 2016-07-12 21:00:02 · 1571 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 F - Mission in Amman (A) 动态维护(刷新:--、++)
先整体的处理一遍,然后边输入操作, 边维护, 什么时候++, 什么时候--这样直接边跑边维护, 挺常见的, Codeforces上见过好几次^_^原创 2016-07-12 21:15:31 · 1692 阅读 · 0 评论 -
UVALive 5963 Confusion in the Problem Set 思维题、Interesting
把输入的数字全转化为0 到 (n -1)/2cnt[min(val, n - 1 - val)]++;并记录则如果符合条件则每个数出现2次, 比如2个1, 2个2,... 此外如果奇数则 则第 (n - 1)/2 + 1 也就是中间那个数对应的数字(n - 1)/2只出现一次, 如果偶数则 n/2 - 1 这个数出现2次。复杂度 O(n)原创 2016-07-22 23:11:13 · 1505 阅读 · 0 评论 -
UVALive 5964 LCM Extreme 数论、LCM、筛选
让人想起素数筛选算法, 还是挺像的sum[i]表示与i互质 且比i小的数之和,那么sum[i] = (1+i)*i/2 - ∑sum[i/d] (其中d是i的所有非1约数)//集训的时候只想到这里,后面的没主意怎么处理了//下面是搜索来的ans[n] = ans[n-1] + ∑sum[n/d]*d*n/d(其中d是n的所有约数) sum[n/d]所求的和的那些数肯定和n是互质的,那么的话他们乘上d与n求gcd的话肯定就是d了,那么他们和n求lcm的话就是sum[n/d] * d(最大公约数) *原创 2016-07-26 01:01:52 · 1247 阅读 · 0 评论 -
HDU 2680 Choose the best route 最短路、Dijkstra、多源化单源最短路
最短路有多个起点, 设为 g[0][i] = 0, 这样Dijkstra的 dist[i] 表示的是0 到 i的最短路径,并且这样一设置 0 - 那些起点的路径长度就是0了,所以就当作起点是0, 化为了单源最短路所以跑一遍Dijkstra就好了原创 2016-07-26 01:20:47 · 1134 阅读 · 0 评论 -
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 评论 -
UESTC 2016 Summer Training #4 Div.2 A - (。•_•。) 预处理打表
for for 枚举C(m, 2) 打好表, 然后然后找出最小的最大值 (。•_•。) 题目很简单, 人人过的题, 但觉得还是有点意思所以也整理到这里原创 2016-07-16 00:27:19 · 862 阅读 · 0 评论 -
HDU 5308 I Wanna Become A 24-Point Master 循环(散乱的前缀+循环体)
计算的时候是乘进去的, 不然有精度损失n == 1,显然不能得到24;n == 2,显然不能得到24;n == 3,一共有16种运算方法, 都无法得到24;n == 4,4*4+4+4=24;n == 5,5*(5-5/5/5)=24;n == 6,6+6+6+6+6-6=24;n == 7,(7*7-7/7)/(7+7)*7=24;n == 8,8+8+8+(8-8)*8*8*8=24;n == 9,9+9+9-9/9-9/9-9/9=24;n == 10,10+10+10/10+10原创 2016-07-27 00:46:07 · 1190 阅读 · 0 评论 -
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 评论 -
UVA 315 Network 求割点、套版题 求割点
求割点的个数套一个求割点和桥模板然后注意一下边的读入因为每行不确定多少个数字, 所以用getline()然后用 isalnum() 来判断是数字还是空格此外注意这里val < 100, 所以可能有两位数 这样就要 if(i + 1 < sz && isalnum(ss[i+1])){ v = 10*(ss[i] - '0') + ss[i+1] - '0'; i++; } else v = ss[i] - '0';然后这里是无原创 2016-07-26 02:12:11 · 1598 阅读 · 1 评论 -
OpenJ_POJ C16D Extracurricular Sports 找规律、大整数类
做这种题感觉比较碰运气(水平不够, 所以比较看运气了)这个是找规律的, 写几组然后看看所有数的最大公倍数 == 所有数的和1 2 31 2 6 91 2 6 18 27这里前 n - 1个数是 1 2 6 18 这样 以3为公比增加的, 然后每个n 对应的最后一个数 是 3^n次然后套一个大整数类的版就好啦这个大整数类的版很棒的原创 2016-07-26 23:25:37 · 1503 阅读 · 0 评论 -
Gym 100541 D. Treasure Box 循环(散乱的前缀+循环体)
在纸上写几组数据, 发现当k一定大以后就会出现循环, 这可以归类于 循环(散乱的前缀+循环体) 哈哈Hash[x] 表示但值为 x 时 增加的值先全部初始化为 -1, 但 x 再次出现时说明开始循环了找到周期, 然后一次性处理掉在周期内的, 然后处理剩余部分原创 2016-07-26 01:56:45 · 1261 阅读 · 0 评论 -
Gym 100541 B. Sum 分块的技巧、思维题、Interesting
写几个n试试看, 会有连续的数字出现, 比如n == 5, 5 2 1 1 1n == 8, 8 4 2 2 1 1 1 1相当于把这些数据分成好多块, 最多sqrt(n)份,区别于数据结构分块的另外一种分块吧^_^len 表示相同数字的个数, 然后i表示这些相同val (LL)的第一个数的下标, ans + len*val //然后注意每一步取模i += len; //直接跳到下一种val的第一个数其中 len = n / val - i + 1原创 2016-07-26 01:37:07 · 1361 阅读 · 0 评论 -
UVALive 6910 Cutting Tree 并查集
简单并查集给出一片森林, 然后执行1)切断 x和x的父节点的边, // 查询的时候不进行路径压缩, 然后直接 father[ x] = x2)查询 x, y 是否是相连通的 //分别找x y的根, _find(x) == _find(y)复杂度 O(n)原创 2016-08-03 22:54:07 · 697 阅读 · 0 评论