Codeforces
文章平均质量分 69
Chen丶HC
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #451 (Div. 2)
C. Phone Numbers (模拟+STL)思路:一种节省空间的做法是map + set s[maxn]筛选时,对每一个只需判断是否为后缀即可,判后缀可用string.substr()再进行比较.#include #include #include #include #include #include #include #include #include #in原创 2017-12-17 17:08:43 · 172 阅读 · 0 评论 -
CodeForces 986A - Fair (BFS)
思路:BFS从多源同时求each货物到each地点的最短距离void nth_element(beg, nth, end) : 求前s个dist的和。#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;const int inf = 1e7 + 5;vector<int> g[...原创 2018-06-01 15:12:29 · 290 阅读 · 0 评论 -
CodeForces 981D - Bookshelves (线性结构dp)
题意:n个数划分成k组,求每组sum值进行与运算的最大值。思路:从高位向低位进行check,显然当某一位可以取1时,最大值该位一定取1。问题转化为check:在满足已经check过的高位取值的情况下,判断当前位是否可以取1。由于与运算的性质,要使某位为1,每个相与的数都必须在此位上也为1,故可以采用dp求解。定义状态dp(i, j): [1, i]数划分为j组,满足条件值为1。状态转移方程:dp(...原创 2018-05-29 13:12:56 · 374 阅读 · 0 评论 -
Codeforces Round #483 (Div. 2) C, D
C. Finite or not?题意:判断p*b^k/q,k的取值任意时能否整除思路:即判断分母的素因子分解是否包含了分子的素因子分解。由于1e18的数据,无法在有限时间内分解,故采用除gcd的方法。除法时,无需每次gcd(b,q),每次令b = gcd(b,q)#include <bits/stdc++.h>using namespace std;typedef long l...原创 2018-05-16 21:29:18 · 168 阅读 · 0 评论 -
Educational Codeforces Round 44 D, E
D. Sand Fortress题意:找长度为k的序列,使得序列之和大于等于n,且|A(i)-A(i-1)| <= 1, A0 <= H,求最小的k。由于k与sum成单增关系,可以二分k的值来找最小的符合条件的k,check采用等差数列求和。注意要先确定上界避免数据过大由于mid = l + (r - l)/2 = r - (r-l)/2 属于 (l, r)为了避免无限循环check之...原创 2018-05-25 16:10:56 · 350 阅读 · 0 评论 -
Codeforces 964D - Destruction of a Tree(思维 + DFS)
关键点:自底向上检查度数时若发现某一节点为偶数,同时可以destory此节点的子树。因为当前节点删去后,子节点度数-1可删去,孙子节点同理。#include <bits/stdc++.h>using namespace std;const int maxn = 200005;struct Edge { int to, next;}e[maxn*2];int hea...原创 2018-05-06 13:43:39 · 227 阅读 · 0 评论 -
Codeforces 954C - Matrix Walk(思维 + 模拟)
问题描述:给定n个数的序列,判断是否可以为矩阵内的路径。思路:先判断出x,y的值,O(n)模拟一遍判断即可。对于y值的判断,我想着一遍扫描直接得出结果使得程序更加繁杂。#include <iostream>#include <cmath>#include <cstdio>using namespace std;const int maxn = 2000...原创 2018-03-28 21:25:47 · 184 阅读 · 0 评论 -
Codeforces 919D - Substring (dp + 拓扑排序)
思路:定义状态dp[i][j]表示在 i 点,j出现的最大次数,利用拓扑排序更新状态#include #include #include using namespace std;const int maxn = 300005;int n, m;char s[maxn];vector edges[maxn];int ans;int dp[maxn][26];int q[m原创 2018-02-03 10:13:16 · 324 阅读 · 0 评论 -
Codeforces 918D - MADMAX (记忆化搜索)
思路:必胜状态:存在一个后继是必败状态由dp[u][v][c] -> dp[v][x][e.c],意思是A走一步后,轮到B走,相当于先手在B记忆化搜索实现即可#include #include #include #include using namespace std;const int maxn = 105;struct Edge { int to, w;原创 2018-02-01 13:22:03 · 304 阅读 · 0 评论 -
Codeforces 918C - The Monster (贪心 + 思维 + 栈模拟)
思路:首先明确题意:找符合要求的区间个数很容易想到利用栈的括号匹配,枚举区间进行判断,此题多了问号的判断。括号匹配不用栈的实现bool check(string s) { int top = 0; for(int i = 0; i < s.size(); ++i) { if(s[i] == '(') top++; else top原创 2018-01-31 13:12:30 · 460 阅读 · 0 评论 -
CodeForces 940F - Machine Learning (带修莫队)
题意:求区间数字出现次数的mex,带修改莫队算法小结问题:n个数,q次询问[l, r]内不重复数字个数。思路:由于区间数字种数不具有区间加和性质,故无法直接用线段数来处理。莫队算法是一种分块的思想,在已知[l,r]结果情况下,可以在O(1)的时间求出临近区间的解。如果将每个区间抽象成平面上的点,离线出所有区间结果的花费等价于求曼哈顿最小生成树。把区间分块,每块为root(q),算法的时间复杂度为O...原创 2018-06-16 00:38:33 · 444 阅读 · 0 评论