UVALive
文章平均质量分 88
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 · 1305 阅读 · 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 · 1509 阅读 · 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 · 1262 阅读 · 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 · 742 阅读 · 0 评论 -
UVALive - 4882 Parenthesis 表达式处理、字符串处理、栈
题意:给一个有括号小写字母加号组成的字符串,去掉多余的括号后输出。表表达式处理、字符串处理、栈用栈,O(n)预处理出每个左括号i 对应的右括号mp[i]的位置,然后扫一遍mp,对于每个括号判断左括号的左边是否是 字母或者右括号,右括号的右边是否是 字母或者左括号,如果是就不能去掉,否则去掉的括号把flag[i]标记为true即可,然后还有2个问题,去掉的括号在接下来的判断中该位置应当忽略,1、比如(((x+y)))x => (x+y)x故上面所说的左边或者右边是指忽略掉以去除括号的情况下的原创 2017-01-16 19:15:58 · 1203 阅读 · 0 评论 -
UVALive - 4294 Shuffle 映射+取反+最大区间覆盖
题意:歌曲种数为s,记录的数量为n,然后给出这个n个记录,每s个歌会随机播放一遍,然后开始重新随机播放这s首歌,为未来可能在几个点进行一次新的循环。映射+取反+最大区间覆盖扫一遍数组,每次如果i - last[v[i]] < s,则点x必须是在这个区间里划分,然后新的循环会在kx之后出现,所以把i和last[v[i]]映射到 [0, s) 里,然后如果 (i % s) > (last[v[i]] % s) 则答案在区间[(last[v[i]] % s), (i % s))里,取反以后是答案不可能在原创 2017-01-21 19:39:19 · 676 阅读 · 0 评论 -
UVALive - 7544 Banking II 朴素dp、类似于背包的dp
题意:给出一个数字字符串,然后给出一个由小写字母构成的字符串,每个小写字母x 表示 有且必须选择一段连续的长度为 x - 'a' + 1的数字字符,然后要求这些小写字母按顺序选取数字字符串的子串,求选取的数字的和的最大值朴素dp、类似于背包的dp定义dpij 表示当前在考略第i个小写字母,将要选取的数字字符串子串是 [j - ( k[i] - 'a' + 1), j],时已经选中的数字的和的最大值,每次初始为 dpij = dpi-1j,然后进行转移即可复杂度 O(n^2)原创 2017-01-21 19:54:29 · 669 阅读 · 0 评论 -
UVALive - 3703 Billing Tables Tire、字典树
题意:对于11位数字串(电话号码),按优先级给定n个区间,每个区间有一个标记。若一个电话号码在某个区间内(如有多个则取优先级最高的区间),则电话号码具有该区间的标记。求一个最小前缀与标记的对应表,使若一个号码的前面与某个前缀匹配,则该号码一定具有该前缀的标记,且不能再与其它前缀匹配。Tire、字典树把区间按照从上到下的顺序插入到Tire中,每个根到叶子节点的路径就是一个符合要求的前缀。每个节点都表示一个电话号码前缀,若某一个节点被一个区间完全覆盖或者几个具有相同标记的区间完全覆盖,则可作为一个叶子节点原创 2017-03-29 18:48:34 · 1115 阅读 · 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 · 705 阅读 · 0 评论