![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
比较杂的题解
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
2017年四川省赛 --- D 题 Dynamic Graph 【 维护路径 】
题目地址补题地址题意 : 给一个DAG(有向无环图) 有q次操作, 每次操作把一个点变成黑色或者变回来(这些点初始都是白色的), 问每次操作后这个图中起点到终点有路径且这条路径上面的点都是白色的.思路 : 维护F[u][v],表示u->v的路径条数, 然后对于每次操作更新 F[u][v] -+= F[u][x]*F[x][v], 然后判断F[u][v]是否>0即可, 这样做是对的,但是F[u原创 2017-06-23 16:16:55 · 432 阅读 · 0 评论 -
atcoder ARC 086 CD题解
传送门 C: 问最少要给多少个元素重新赋值, 使得这个数组中最多只有k种数字.直接记录每个数字出现的次数, 然后从大到小排个序, 从第k+1种那开始选去后面的元素即可.AC Codeint a[maxn];bool cmp(int a, int b) { return a > b;}void solve(){ int n, k; cin >> n >> k;原创 2018-02-07 17:01:07 · 485 阅读 · 0 评论 -
atcoder ARC 084 CD题解
传送门 C: 给定三组数, 问从每一组中选择一个数使得满足a < b < c 的选法有多少种.首先我们要知道对于第二个数组中的每一个数, 第三个数组中有多少个大于它的记成cb[i], 并做前缀. 然后以第一个数组中的数作为基准, 从第二个数组找大于它的分界线, 那么处于这个区间中的数 cb[n] - cb[pos-1]就是答案, 然后累计即可.AC Codeconst int maxn = 1原创 2018-02-07 17:14:29 · 426 阅读 · 0 评论 -
牛客练习赛6 B,D 题解
比赛传送门 B: 首先不要把题想太复杂了, 只需要维护好几个值就OK了, 首先是5个数组 fa[x] 表示 x 的父亲是谁 son[x] 表示x有说多少个儿子 op[x] 表示x被操作的次数 a[x] 表示x的儿子对x的影响数 b[x] 表示x的孙子对x的影响数有了这些的基础, 那么对于每次我们操作的点u的点权和res, 首先是他父亲对他的影响 res += a[fa[u...原创 2017-11-21 00:15:21 · 498 阅读 · 0 评论 -
Wannafly 挑战赛 10 B, C 题解
传送门 B: 我的姿势不对, dfs深搜超时, 题解说的是dp. 那么我们考虑dp做法, dp[i][j] 代表前i个轮子有j个选择了匹配的小写字母, 那么对于当前这个轮子的匹配要么是匹配一个小写字母, 要么匹配一个空字符, 然后依次匹配下去, 判断是否可以到达dp[n][size(s)] 即可, 注意长度> n 直接NO.AC Codeonst int maxn = 3e2+5;char s[原创 2018-02-24 13:04:24 · 282 阅读 · 0 评论 -
BZOJ 1001 狼抓兔子 【平面最小割转最短路】
传送门 这道题是很明显的平面最小割转最短路的题, 就是建图方法有很多种, 我写的是1 2 3 ….. 按行下去的, 死活过不了, 本地找AC代码对拍完全没问题, 然后我就被卡了一下午, 是在不行找题解复制了一个建图方法就过了…. 可以只是数字的不同这不会有影响吧? 总之这道题真的非常坑, 还要特判n == 1 || m == 1的情况, 最重要的还是思想, 可是我能看过来用这种算法做, 但是我每次原创 2018-03-04 15:02:42 · 314 阅读 · 0 评论 -
计蒜客 2018 蓝桥杯省赛 B 组模拟赛(一)题解
传送门 A: 直接暴力跑答案 ans = 1;B: 还是暴力算模拟一遍即可 ans = 571;C: 这道题还是暴力算有多少个满足条件的即可, 就是模拟的时候有点恶心, 要考虑到边界情况即可. AC Codeconst int maxn = 1e5+5;void solve(){ int ans = 0; for (int i = 100 ; i <= 100000 ;原创 2018-03-22 20:45:02 · 886 阅读 · 0 评论 -
Wannafly 挑战赛 12 A, C题解 【dp题】
传送门 A: 中文题就不说题意了, 这个一眼背包啊, 但是纠结在这个利率是加上面, 然后一直过不了样例, 知道我换成了乘, 这个银行利率还是不会算啊…….. 直接完全背包即可.AC Codedb dp[maxn], r[10];void solve(){ int n; cin >> n; for (int i = 1 ; i <= 5 ; i ++) { if原创 2018-03-24 20:51:58 · 196 阅读 · 0 评论 -
第13届广工大校赛 F 题 等式 【数学推导 + 约数个数定理】
传送门 题意: 就是求1/x + 1/y = 1/n(x <= y),给定n,求x, y的正整数解.思路:刚那道题是懵逼的, 比赛时也是乱搞的, 后面知道正解了…. (没想到啊), 首先化解原式: yn + xn = xy -> xy - xn - yn = 0 -> xy - xn - yn + n^2 =n^2 -> (x-n)(y-n) = n^2; 化完这里原创 2018-03-24 21:03:55 · 330 阅读 · 0 评论 -
2018年四校联合周赛-第三场 灯 题解
肯定很多人上来就是容斥一下, 但是实际上不是的, 可以将这三个的数的VN图画出来就明白了, 容斥算的总的并面积, 而我们需要的是算覆盖奇数次的面积, 所以容斥是错的, 然后通过vn图可以发现关系恰好是1 2 4的倍数. 所以直接O(1)的算即可.AC Codevoid solve(){ int t; scanf("%d", &t); while(t--) { ll原创 2018-03-24 23:29:03 · 209 阅读 · 0 评论 -
atcoder APC 001 BD题解
传送门 B: 给定两个长度相同的数组, 每次从第一个数组中选一个位置x, 从第二个数组中选一个位置y, 然后a[x]+=2, b[y]++, 问经过若干次这样的变化后能否使a, b两个数组相等.我们另ci = ai - bi, 若ci == 0 不用管, 若ci < 0 , 求和ci/2(向下取整, 为什可以向下取整了,因为此时是最接近于bi的一个数, 当然有可能等于bi, 否则就差1, 差1那原创 2018-02-07 16:49:30 · 550 阅读 · 0 评论 -
ZOJ 3175 Number of Containers 【数学图像性质(一个常见算式的经典计算)】
传送门 // 按照题意出发我们可以很容易的推导出最后求 (n/1 + n/2 + …. + n/n) - n. // 可以记一下这个算式的特征, 因为这个还是比较经典的, 后面可能会遇到的. 那么如何求了,暴力肯定不行, 又是一个调和级数无通项, 所以只有从函数图像入手, y = n / x , 可以发现这幅图是关于x = y 对称的, 所以我们只需要算一遍√n的ans, 然...原创 2018-01-26 10:30:17 · 403 阅读 · 0 评论 -
2017 Multi-University Training Contest - Team 2 1011 Regular polygon【求平面中正方形的个数】
传送门 // 给你许多点, 问可以组成多少个不同的多边形, 给的点都是以整数输入. // 思路: 随便举点例子就知道, 只能组成正方形, 其实就是数整个平面中有多少个正方形. //随便画一个正方形知道, 知道任意两个点后, 可以算出其他两个点的坐标(画一画就知道了), 而实际上我们枚举了一个正方形的两条对角线和两条边, 即一个正方形我们算了4次,所以最后答案要除4. // 画一个正方形,原创 2017-07-31 16:07:36 · 333 阅读 · 0 评论 -
FZU --- 2283 Tic-Tac-Toe 【三子棋小模拟】
//题意, 给你一个目前的状态, 问一个人是否可以在两步之内获胜, (现在该他, 然后对手, 然后再是他). 直接模拟下棋判一下是否可以赢就是了. 即第一次下完了以后, 他是否还有两种赢的状态, 有就一定会赢, 否则就不能赢.(和CF一道模拟五子棋的有点像) AC Code/** @Cain*/int n,k;char a[5][5];bool check(char x) //判断当前x棋原创 2017-07-23 15:55:56 · 963 阅读 · 0 评论 -
龙卷风摧毁停车场题解
//这道题还是比较好做吧, 就直接模拟求余数的方法, 用一个数组余数是否出现过, 并判断是否在某一个阶段余数是否为0,如果余数为0或余数出现过,说明是已经除完或第二次循环的开始,在此处跳出循环即可AC Code#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;bool vis[maxn];int main(){原创 2017-08-09 09:32:57 · 886 阅读 · 0 评论 -
2017 Multi-University Training Contest - Team 2 1003 【贪心 + 优先队列】
传送门 //题意还是稍微有点难懂, 就是在序列a后面再添n个元素, 但是每一个元素要满足题目所给的条件, 就是从b序列中任意抽出一个, 使得a序列中从b[k]下标到即将被添加的那个元素的下标中抽取一个max, 最后求出a(n+1)~a(n+n)的和mod, 注意每一个b[k]最多只能被用一次, 而且注意每一个b[i]的范围都是<=n的.//思路: 为了max, 所以贪心的选择, 每一次我们都选可以原创 2017-07-27 23:02:46 · 348 阅读 · 0 评论 -
HDU -- 5908 Abelian Period 【思维 + map + 暴力】
传送门 //题意: 问可以将给定的一个序列, 划分成长度全为相同值的一些子串, 且每个子串中出现了的数的次数要相等. //思路: 首先必须是n的约数才行. 那么枚举n的约数, 对于每一个约数, O(n)暴力扫一遍判定是否满足就行. 总的复杂度为O(n的约数个数*n). 需要注意一些, 在暴力判定两个串是否符合题意时, 用map是非常方便的. 这是map的一个骚操作, 记好了!!! 详见代码.原创 2017-09-08 15:36:15 · 367 阅读 · 0 评论 -
HDU 6170 正则表达式匹配
传送门 //题意: 就是给定两个字符串问是否匹配, 但是要满足正则表达式的规则(就是题目稍改了下规则) //思路: 正解是dp, 网上都有, 不过乘此学习了一波C++的regex函数, 也是非常方便的, 比Java的快多了,, 我们要做的就是当有.出现时它的含义是前面可以出现任意多的任意字符, 而在这道题中题意是要匹配 . 所确定了的字符任意多次, 所以我们必须对 . 进行处理. 即把他们替换原创 2017-12-12 19:45:32 · 420 阅读 · 0 评论 -
“玲珑杯”线上赛 Round #24 E 题 【思维 + 树状数组】
传送门 // 题意: 给定一个长度为n的序列, 问它的2^n个子序列的逆序对之和是多少.这道题和牛客上面一道题很相似, 牛客上面是求它的n(n+1)/2个子区间的逆序对之和. 明显这个问题依旧考虑贡献问题, 所以想一想就知道每一个逆序对的贡献就是2^(n-2)次方, 因为去除掉逆序对的那两个数, 剩下的数的任意一个子序列再加上这两个数就行啦. 所以ans 就是逆序对数 * 2^(n - 2)次方.原创 2018-01-23 00:14:20 · 323 阅读 · 0 评论 -
Wannafly 挑战赛 4 C 题 割草机 【模拟】
传送门 //题意: 题意就是开始位于(1,1)处, 面向右方, 然后每次 只能向面朝的方向移动, 每次向下移动面朝方向反向, 每次移动花费1时间, 问吧所有的草除掉, 最少要用多少时间.//思路: 很明显在奇数层只能往右走,偶数层只能往左走, 并且不能回头, 那么走的方式也只有一种, 由于只能向面朝的方向走, 所以我们可以记录每一行它草地的在最左方和最右方的列标, 然后通过比较这一行和下一行原创 2017-11-25 10:53:20 · 458 阅读 · 0 评论 -
HDU -- 5071 Chat 超强模拟
链接 熟悉map和vector的操作, 特别是map的,vector只是充当一个队列的储存. //map.count(k); 算出map中有多少个k, 其中k为map的key值. //一个find Vector的例子(BAIDU里找的),注意find不属于vector的成员,而存在于算法中,应加上头文件#include :#include #include #include u原创 2017-07-20 01:00:07 · 381 阅读 · 0 评论 -
第十四届华中科技大学程序设计竞赛 部分有趣题的题解(A, C, I, L)
传送门A: 题意: 就是定义树上的一个三元组(a, b, c) 成立的条件是|dis(a, c) - dis(b, c)| % 2 == n % 2; 给定一棵树, 问树上这样的三元组有多少个.思路: 分析可知, 我们肯定是把枚举c, 然后判断每一个c有多少个a, b, 可以填, 然后我们发现填这个是和n的奇偶性有关, n为奇, 那么一定时奇-偶(或者相反), 那么我们要知道的就是对于树上每...原创 2018-09-25 13:48:49 · 499 阅读 · 0 评论