自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 Forgotten Spell Gym - 101755M

点击打开链接恶心思维模拟 记出现三种,两种,一种字符的位置的数量分别为v3 v2 v1(1) v3>1 不可能 因为每人最多错一次(2) v3==1    (1) v2>1 不可能    (2) v2==1 这时情况很复杂 很难继续分类讨论 直接暴力枚举出现三种和两种字符的那两个位置 然后看有几种结果    (3) 模棱两可 可能有一人是对的 有可能全错(3...

2018-04-29 08:50:44 486

原创 Farm Game HDU - 3696

点击打开链接分析可得 每种物品要么完全转换为另一种物品 要么保持不变 可以发现 最后总的价值就是 sgm(i:1->n) have[i]*value[j]*rate 其中have[i]是第i种物品初始数量 value[j]是第i种物品的最终去向j物品 rate是一路转换得到的转化率累乘之积正向考虑无法建图 因为一个物品的数量可能会因为其他逻辑相邻(有转换关系)的物品的转化而多次增加 ...

2018-04-27 13:51:36 159

原创 Calculate the Function ZOJ - 3772

点击打开链接通过题目给的递推公式 可以的出其矩阵形式 然后就是求某一区间的矩阵乘积 线段树或者rmq都可以解也可以只维护一个前缀积 然后求矩阵的逆#include <bits/stdc++.h>using namespace std;#define ll long long#define M 1000000007struct node{ int l;...

2018-04-27 08:20:50 160

原创 Paint the Grid Again ZOJ - 3780

点击打开链接给一个白板 每一次可以把一行涂黑或者把一列涂白 逆向考虑的话 每涂完一次都会有一行全黑或者有一列全白 找出来更新当前状态 然后挑字典序最大的继续更新即可若最后能把每个空都更新一遍就是一张符合题意的图至于次数最少的问题 其实只要是一张存在正确着色方式的图 那么该涂多少次都是固定不变的 因为每一次只能把一行涂黑或者把一列涂白 而不是每一行每一列涂成黑白都行(一开始就是看错题了的...

2018-04-25 22:20:37 116

原创 Unrequited Love ZOJ - 3601

点击打开链接一个聚会中 存在某个人 其所有喜欢的人都出现了 且不被所有出现的人喜欢其实这样的人最多只能有一个 对于题目所给的每一个集合 从前往后扫一遍 找出一个符合条件的 再针对其判断一遍从前往后 是判断每个人与之后的人的关系 只有之后的满足了 才需要判断之前的#include <bits/stdc++.h>using namespace std;map <string,i...

2018-04-25 12:49:21 153

原创 Paint the Grid Reloaded ZOJ - 3781

点击打开链接先把每个连通块都当做一个点 然后建图 然后对每一个点bfs得到一个最大深度 再取最小值这样做是因为这个图是个二分图 每个点与其邻接点的颜色都不一样#include <bits/stdc++.h>using namespace std;#define N 0x3f3f3f3fstruct node{ int v; int next;}...

2018-04-25 10:36:10 116

原创 Lazy Salesgirl ZOJ - 3606

点击打开链接先把每个人按其与之前一个人的时间差排序 然后更新线段树对应时间点的位置 因为当前时间间隔比之前的都长 那之前的肯定也都满足关键之怎么处理 123123... 这个问题 对每一个区间开四个变量 分别记录该区间内第一个人买一个两个三个时区间的总价值以及 总人数 pushup时通过左区间人数确定与右区间哪个变量想加 这样就有了满足区间加法的性质#include <cstd...

2018-04-25 09:09:02 179

原创 Superbot ZOJ - 3865

点击打开链接在任何一个位置上 如果其转向与到达时间对p取模后的状态在之前已经存在 那就没必要再走一遍 开个四维数组标记一下即可还有就是注意 next数组中存的方向必须与题目给定顺序一致#include <bits/stdc++.h>using namespace std;const int maxn=10+10;const int maxm=50+10;s...

2018-04-25 08:26:02 157

原创 Zebras CodeForces - 950C

点击打开链接遇到一个0 先看有没有以1结尾的串 有就补上 没有就新开一个串遇到一个1 有以0结尾的串就填上 没有就输出-1如果每次都遍历所有已经构造的串 复杂度太高 可以用队列优化#include &lt;bits/stdc++.h&gt;using namespace std;vector &lt;int&gt; ans[200010];queue &lt;int&gt...

2018-04-20 20:31:48 169

原创 Dream City ZOJ - 3211

点击打开链接dp[i][j]代表前i棵树在前j天的最大收益dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+tree[i].a+tree[i].b*(j-1)) 表示第i棵树砍还是不砍这样写 首先要对n棵树按先b后a升序排序 因为这里用dp主要是因为a的因素 导致选哪些树不确定 一旦砍哪些树确定了 一定是b值大的在后砍#include &lt;bits/s...

2018-04-20 09:41:16 124

原创 Subpalindromes URAL - 1989

点击打开链接每次修改字符串中的一个字符 然后问某个区间是否为回文串 这个要用的多项式哈希 在这里就是把采字符串当做26进制数 然后比较从左至右 和从右至左的哈希值是否相等#include &lt;bits/stdc++.h&gt;using namespace std;#define ll unsigned long longstruct node1{ int l; ...

2018-04-20 08:48:00 204

原创 A Simple Task CodeForces - 558E

点击打开链接一个由26字母组成的字符串 每次对一个区间内的子串升序或降序排序 如果以字符串为基础建立线段树 真的是毫无头绪(或许这就是所谓的不满足区间加法吧) 但是26个字母很少 对每一个字母建立线段树是可行的 并且排序也可以考虑用基础排序来实现 这样时间空间都满足#include &lt;bits/stdc++.h&gt;using namespace std;struct no...

2018-04-19 14:00:23 213

原创 Road HDU - 5861

点击打开链接对每条路求出最早与最晚使用时间 记为l与r 然后在l加上花费 在r+1减去花费注意题目给的两个端点没有规定大小顺序!!!#include &lt;bits/stdc++.h&gt;using namespace std;#define N 0x3f3f3f3fstruct node1{ int l; int r; int minn; ...

2018-04-19 12:24:38 123

转载 线段树总结

线段树详解 By 岩之痕 目录:一:综述二:原理三:递归实现四:非递归原理五:非递归实现六:线段树解题模型七:扫描线八:可持久化 (主席树)九:练习题   一:综述假设有编号从1到n的n个点,每个点都存了一些信息,用[L,R]表示下标从L到R的这些点。线段树的用处就是,对编号连续的一些点进行修改或者统计操作,修改和统计的复...

2018-04-18 21:51:50 350

原创 横向打印二叉树 蓝桥真题

 模拟题 每个数在答案矩阵中该放在什么位置 只需要确定该数最高位的行列下标即可 行数就是该数的中序遍历的序数 列数就是普通dfs后该数所在节点的深度 加上所有父节点上的数的长度 然后就是 - 和 | 了 随便处理一下#include &lt;bits/stdc++.h&gt;using namespace std;struct node{ int l; int r...

2018-04-18 21:27:06 465

原创 Going Home HDU - 1533

点击打开链接费用流模板一开始建的图太烂了 每个点和四周的点建边 其实只对m与H建边即可 边的费用即为两点曼哈顿距离#include &lt;bits/stdc++.h&gt;using namespace std;#define N 0x3f3f3f3fstruct node1{ int v; int w; int c; int next;...

2018-04-16 16:11:23 122

原创 StarCraft FZU - 2219

点击打开链接这题是训练时队友写的 自己就没想到...感觉二分很神奇 可以把很多复杂的问题简化成一个判定性的问题 在简化问题之后很多原本不可知的东西就变成已知量 从而可以找到更简单的方法来解决简化的问题 然后由这个问题的执行结果决定下一步该怎么做上面是去年说的废话二分一个时间 把所有建筑任务都堆到最后放 比如当前二分的时间是lim 任务执行时间是t[i] 则最晚开始时间为lim...

2018-04-15 19:42:30 140

原创 Simple String Problem FZU - 2218

点击打开链接字符种类很少 所以可以利用状压 把每个子串都变做一个数 然后记录每个数(子串)对应的最大长度 然后从低状态一路更新到高状态 这样就相当于一个基于状态高低的前缀和 再然后就是枚举每一种状态 对全一状态也就是最高状态进行异或 这样就得到了每一位都与当前枚举状态不同的最高状态 又因为之前已经求得一个状态前缀和 所以直接相乘即可#include &lt;cstdio&gt;#include ...

2018-04-15 16:21:57 184

原创 Sub-Bipartite Graph FZU - 2141

点击打开链接贪心思想 因为题目所求的二分图至少有m/2条边 所以对于每个点 只看其邻接点中位于那个集合的点多 这样当前点的邻接边至少有一半加入了所建立的二分图中 最终肯定满足m/2注意 二分图未必连通#include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;cstring&gt;#include &lt;algorith...

2018-04-14 22:00:34 115

原创 THE MATRIX PROBLEM HDU - 3666

点击打开链接由题目得不等式 L&lt;=(c[i][j]*a[i])/b[j]&lt;=U 然后卡在这了... 对于除法可以左右同取log转换为减法 实在是菜......然后就是差分约束模板 只不过这里我们不用再考虑每一个点(loga[i]或logb[j])的具体取值 因为题目只要求判是否可行 只判正负环即可 所以不必纠结源点的取值#include &lt;cstdio&gt;#i...

2018-04-13 21:29:38 137

原创 数字1的数量 51Nod - 1009

点击打开链接每10个数提供1个个位1 每100个数提供10个十位1 每1000个数提供100个百位1...以此类推#include &lt;bits/stdc++.h&gt;using namespace std;#define ll long longint main(){ ll n,i,ans; while(scanf("%lld",&amp;n)!=EOF) ...

2018-04-13 18:57:35 184

原创 Is the Information Reliable? POJ - 2983

点击打开链接公式很明显 主要是注意图的连通性问题 要建立超级源点否则可能图本身不连通 而起点所在分量无负环 而负环存在于其他分量当中#include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;struct...

2018-04-13 12:26:07 129

原创 Digits Count FZU - 2105

点击打开链接数据量很小 [0,15] 四个二进制位 每一位对应一颗线段树 然后就是对每一位进行区间更新与查询#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;#define N 0x3f3f3f3fstruct node{ int ...

2018-04-13 11:39:39 128

原创 取余最长路 51Nod - 1624

点击打开链接枚举右端点 同时把已经扫过的左端点加入set 然后利用set二分找加和取余后的最大值#include &lt;bits/stdc++.h&gt;using namespace std;#define ll long longset &lt;ll&gt; st;ll mat[4][100010],sum[4][100010];ll mod;int n;int main(...

2018-04-13 09:53:32 124

原创 House Man HDU - 3440

点击打开链接两个不等式很明显 主要是需考虑一个实际位置先后的问题 虽是从低到高 但题目中已说明原序列的相对位置不可改变#include &lt;bits/stdc++.h&gt;using namespace std;#define N 0x3f3f3f3fstruct node1{ int pos; int id;};struct node2{ ...

2018-04-12 16:09:09 135

原创 Schedule Problem HDU - 1534

点击打开链接dis[2*i-1]表示第i个任务的起始时间 dis[2*i]表示第i个任务的终止时间可得:1 dis[2*i]-dis[2*i-1]=val[i]2 FAS dis[2*u]-dis[2*v-1]&gt;=13 FAF dis[2*u]-dis[2*v]&gt;=14 SAF dis[2*u-1]-dis[2*v]&gt;=15 SAS dis[2*u-1...

2018-04-12 08:57:59 123

原创 Brush (III) LightOJ - 1017

点击打开链接dp[i][j]代表前i个刷子 刷前j个点 再枚举当前刷子以某个点为起点能获得的最大值#include &lt;bits/stdc++.h&gt;using namespace std;struct node{ int x; int y;};node point[110];int dp[110][110];int pos[110],sum[1...

2018-04-11 21:36:43 185

原创 Caocao's Bridges HDU - 4738

点击打开链接模板题 注意去重边的处理#include &lt;bits/stdc++.h&gt;using namespace std;#define N 0x3f3f3f3fstruct node{ int v; int w; int next; int flag;};node edge[2000010];int f[1010],fir...

2018-04-11 10:59:57 185

原创 Ponds HDU - 5438

点击打开链接无向图拓扑排序 和有向图拓扑在一些小细节上有些区别 可能会出现度数为负数的情况 最稳妥的方法就是在每个点拓扑入队列时标记 这样才能保证所有度为0或1的点都被删掉了#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e4+10;const in...

2018-04-11 09:00:28 254

原创 夹克爷发红包 51Nod - 1625

点击打开链接因为n很小 直接2^n找出每行分配高级红包的情况 在行确定的情况下 就可以对列进行贪心了#include &lt;bits/stdc++.h&gt;using namespace std;#define ll long longll mat[50][200];ll x,ans;int pre[50];int n,m,k,cnt;void solveI(){ ...

2018-04-11 08:40:31 100

原创 Cashier Employment HDU - 1529

点击打开链接看题解才懂..点击打开链接这题难在24小时是循环的 需要二分处理 长知识了 还是见得少啊..#include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;#define N 0x3f3f3f3f...

2018-04-10 15:28:12 209

原创 Father Christmas flymouse POJ - 3160

点击打开链接和poj3592一个套路 缩完点跑最长路 但是要注意 缩点时不能把负值加上!#include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;stack&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;#define ...

2018-04-10 12:55:14 128

原创 Instantaneous Transference POJ - 3592

点击打开链接因为图中每一个点被访问过后权值就消失了 所以不能用最短路直接求 先缩点 然后得一DAG图 求最长路即可if语句后边多了一个分号 调了一晚上 真的舒服#include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;stack&gt;#include &lt;cstring&gt;#include &lt;algor...

2018-04-10 11:09:38 167

原创 白色相簿 计蒜客

 如何判断一个图中是否存在三元环 先bfs全图 得到一颗bfs树 然后用O(N+M)的方法遍历全图 若相邻两点且深度相同 那一定存在三元环 因为无论从哪一个点进入三元环 另外两点在bfs树中的深度必然相同 #include &lt;cstdio&gt;#include &lt;queue&gt;#include &lt;cstring&gt;#include &lt;algor...

2018-04-09 22:10:33 230

原创 Relief grain HDU - 5029

点击打开链接题目要求在u到v这条链上加入w这个元素 并统计每个点上最多的元素是谁 只要在链首加入一个w 链尾加入一个-w即可 有点离线处理的意思树链剖分中 一条链会被划分成logn条小链 这些小链在树剖版dfs序中是连续的 所以要分段更新#include &lt;bits/stdc++.h&gt;using namespace std;struct node1{ in...

2018-04-09 16:12:29 126

原创 Change FZU - 2277

点击打开链接线段树区间更新单点查询 对于每一个更新 都看作是一次对等差数列的首项以及公差的改变 为了用实现线段树 要把首项转到根结点 又因为是单点查询 所以也不用考虑区间和的问题G++WA VC++AC 真的有毒#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using nam...

2018-04-06 12:13:31 204

原创 Super Mario HDU - 4417

点击打开链接两种做法主席树模板题 对两个版本的线段树进行区间查询 然后做差即可#include &lt;bits/stdc++.h&gt;using namespace std;struct node{ int nl; int nr; int val;};map &lt;int,int&gt; mp;node tree[2000010];in...

2018-04-05 15:22:58 331

原创 D-query SPOJ - DQUERY

点击打开链接和hdu3333基本一样 两种方法主席树有时可看做是利用线段树做的一个前缀 但在这里并没有用到前缀和的性质 和线段树离线做法有些类似 都是把同一个数出现的位置尽量提前#include &lt;bits/stdc++.h&gt;using namespace std;struct node{ int nl; int nr; int val;...

2018-04-05 13:18:42 172

原创 Snacks HDU - 5692

点击打开链接//之前做的dfs序加线段树都是每个点先序遍历一次 这道题还要保存dfs返回时每个点的信息 这样就巧妙的得到了一个链的权值和上述全是废话..在dfs时直接可以保存从根结点到一个节点的路径权值 然后通过dfs序将这棵树映射到1到n这个序列上 线段树一个区间维护的就是被映射到这个区间的所有节点的路径权值的最大值 每改变一个点的权值会影响所有包含该点的路径权值 也就是以该点为根的...

2018-04-04 21:40:40 154

原创 K-th Number POJ - 2104

点击打开链接第一次写主席树 存模板推荐一个学长的博客 有图就是好理解 点击打开链接#include &lt;cstdio&gt;#include &lt;map&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;struct node{ int l; int ...

2018-04-04 20:00:15 166

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除