自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ProLights的博客

Someday, you can program the lights.

  • 博客(31)
  • 收藏
  • 关注

原创 关于flag布尔数组标记 和 set 标记 的一些想法

当只做整体标记时,即测试本组数据时不用重置。 1) 如果 需要标记的东西不是很大,且能够用flag数组的下标来存储状态信息,则用flag数组 无论是空间复杂度还是时间复杂度都会更优越些。 比如 http://codeforces.com/problemset/problem/699/D 这题全用flag布尔数组, 源码 http://codeforces.com/contest/699/submission/20972041 时间 561 ms 内存 7420KB

2016-09-29 00:52:59 1677

原创 Codeforces Round #363 (Div. 2) D. Fix a Tree __ dfs+剪枝+标记数组

dfs+剪枝+标记数组找到第一个环把其中的一个点作为 root,然后每个环切去一条边。找root的时候优先找自环的环,如果有自环的环,则 剩余的环每个环去掉一条边把环连到root上 环的个数 - 1 个操作;如果没有自环的环,则有 环的个数 个操作。具体操作 用dfs+标记数组实现,且需要剪枝不然可能有大量重复或者部分重复的dfs用 bool flag[maxn]表示本次dfs访问过的点,当出现 flag[fatehr[v]] == true 时有环,且flag数组要在dfs回溯的时候重置好,方便

2016-09-29 00:00:40 1089

原创 Codeforces Round #363 (Div. 2) C. Vacations 贪心+dp

贪心+dp//!从前往后, 前面的决定后面的, dp的思想, 前面处理完的时候前面部分是最优的了如果第一位是 3, 第二位任意,直到出现一个1或者2后面的如果是0还是0,如果是3就要相应的转化成1 或者 2 if(val[0] == 0) ans++;对于 i = 1 ~ n-1if(val[i] == 1 && val[i-1] == 1){ ans++; val[i] = 0; }else if(val[i] == 2 && val[i-1] ==

2016-09-28 23:32:06 1004

原创 Codeforces Round #373 (Div. 2) C. Efim and Strange Grade 贪心、实数字符串"a.b"处理

贪心、实数字符串"a.b"处理每次可以任选择一位进行四舍五入,求中间所有过程中出现的最大的数字。所以选 '.'右边的第一个 s[i] > '4'的位置,往左进行四舍五入,本次一旦停止了,如果当前位置 s[j] <= '4', 则break;当前的 s 就是答案了;否则继续往左四舍五入。对于 '.'右边没有 s[i] > '4' 则s本身直接就是答案了此外 对于 999.99999这样的数字有特殊的处理 四舍五入是 从右往左,当 s[i] == '9' 且 i == 0 时 s = '1' + s;

2016-09-28 02:40:42 1511

原创 Codeforces Round #373 (Div. 2) B. Anatoly and Cockroaches 贪心、字符串

贪心、字符串对于 1010101...... (0 ~ n-1) 如果奇数的地方不是1就 ans1++, 如果偶数的地方不是0就 ans0++,ans = max(ans0, ans1); //min(ans0, ans1)次交换, ans - min(ans0, ans1) 次改变颜色然后再对 010101......(0 ~ n-1) 的情况跑一遍2个ans取最小值复杂度 O(n)此外 用 x & 1 表示偶数的时候 要写成 ((x & 1) == 0),(x & 1)要加括号,位运算符的优

2016-09-28 02:06:28 1424

原创 Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 水题

水题刚开始对于n == 1的时候直接来了个 - 1;然后其它地方 对于 0 必增, 15 必减, 否则看趋势。 忘了去把 n == 1 的时候也对这 0、15 特殊判断下了,所以被hack了, 然后改对,尴尬,幸好没有锁。

2016-09-28 01:56:27 942

原创 HDU 5904 LCIS __ dp、LCIS

dp、LCIS、 最长公共上升子序列且每次递增 1 状态定义:dpa[i] 表示以ai结尾的每次递增 1 的 LIS 的最大长度, dpb[j] 表示以bi结尾的的每次递增 1 的 LIS 的最大长度,边界:当 i == 1时, dpa[i] = 1, dpb[i] = 1;状态转移方程: dpa[i] = dpa[Inda[a[i] - 1]] + 1; dpa[i] = max(dpa[i], dpa[Inda[

2016-09-27 23:49:35 621

原创 Codeforces Round #364 (Div. 2) D. As Fast As Possible __ binary search、方程 或解方程 直接解出答案

binary search、方程1、binary search、方程每个pupil 坐车的时间相同、走路的时间相同、总时间相同。所以 l = 0, r = INF;对于 每个答案 x,验证总时间 cnt <= x,即车跑的总时间要小于等于 总的总时间t1 + t2 == x // t1 为每个pupil 走路的总时间, t2 为每个pupil坐车的总时间,每个pupil 都必须且只做一次车v1 * t1 + v2 * t2 == l(路程) //求出 t2就像图中所

2016-09-25 22:56:17 1246

原创 Codeforces Round #364 (Div. 2) C. They Are Everywhere __ two pointers or binary search

two pointers or binary search1、binary searchint l = 0, r = n;while(l + 1 < r){ x = (l + r) >> 1; if(check(x)) r = x; //O(n)的检查 sz = x 时是否满足条件, 如果满足则 r = x, 然后继续检查x更小的情况, 最后 ans == x; else l = x;}复杂度 O(nlogn)2、two pointers用 sz 维护区间内的种类数 //

2016-09-25 22:21:47 1190 1

原创 ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 C.A Simple Job map<string, map<string, int> > 、字符串单词词组的处理

map<string, map<string, int> > 、字符串单词词组的处理A,B CA ,B A B等等情况处理好就好当碰到,或者行末的时候, res.clear(), str.clear(); flag = false;然后用res表示该词组的前一个单词,str表示后面的单词具体实现请看代码吧

2016-09-24 22:28:30 1435

原创 Codeforces Round #372 (Div. 2) D. Complete The Graph 图论、最短路、Dijkstra、路径、分配部分边权

图论、最短路、Dijkstra、路径、分配部分边权首先去点2种不可能的情况:1、不记录w == 0 的边的情况下,求出dis[e], 如果 dis[e] < L, 则 w == 0 的边无论怎样分配权值,src 到 e 的最短路 都是这个 dis[e], ans = “NO";2、把w == 0 的边赋值为1,然后把这些 w == 0的边记录下来,跑一边 Dijkstra,如果 dis[e] > L, 则 由于 w > 0 即 w >= 1, 则无论怎样dis[e] 都大于 L, ans = ”NO“

2016-09-23 19:07:27 1622

原创 Codeforces Round #372 (Div. 2) C. Plus and Square Root 数论、方程、化简、推公式

数论、方程、化简、推公式首先 当前 在 level i, res是当前屏幕上的数,i+1是目标, k是答案则有 res + k * i = (i + 1) * (i + 1) * x *xk * i = (i + 1) * (i + 1) * x *x - res;这样要O(n^2)了显然不行k=( (i + 1) * (i + 1) * x *x - res ) / i;后来 发现 res 可以被 i 整除的, 然后就想把 i 放进去k = (i + 1) * (i + 1) * x *x

2016-09-23 19:07:11 1530

原创 Codeforces Round #372 (Div. 2) B. Complete the Word __ two pointers、队列(queue)

two pointers、队列(queue)用 queue<char> que;维护一个除了 '?'以外所有字符最多在该队列中出现一次的队列, 当que里的合法元素达到 26 个是就是 nice substring 了。在这过程中 用 map<char, int> ch 维护队列中每个字符出现的次数, 且用 ind 维护队列的首元素的在s中的下标。得到要求的que以后, 扫一遍map, 把没有出现过的大写字母丢到 队列 ans里去, 然后 输出 s[ 0 ~ ind-1], 输出 nice subs

2016-09-23 19:06:46 1353

原创 2016 ACM/ICPC Asia Regional Shenyang Online 1009 QSC and Master 区间dp

状态定义: dp[i][j][u] u == 1 时表示 当端点 i, j 进行合并时(取出 val[i] 、 val[j] 时) 或 i < k < k+1 < j, key[i] 和 key[k] 可以合并 且key[k+1] 和 key[j]合并的, 区间 [i, j]内的最大价值; u == 0 时表示 当端点 i, j 不进行合并时(不取出 val[i] 、 val[j] 时) 的 区间 [i, j]内的最大价值;初始化:全部初始化为 0;边界: 当 j - i == 1 时 如果可以合并

2016-09-20 01:22:15 1381

原创 Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum 离线操作,树状数组,last[value],异或和

离线操作,树状数组,last[value],异或和首先,根据位异或的性质, 有一个结论:区间内所有出现次数为偶数的元素的异或和 == (区间内所有元素的异或和) ^ (区间内所有不同元素的异或和) 1、对于求 (区间内所有元素的异或和) 可以用 前缀异或和 2、对于(区间内所有不同元素的异或和), 则要用类似于求 区间不同的元素的个数 的算法 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 树状数组+离线操作先把所有询问储存下来, 然后

2016-09-16 23:17:16 626

原创 Codeforces Round #365 (Div. 2) C. Chris and Road 实数级的二分法、几何

实数级的二分法、几何可以把问题分成2种情况第一种情况:车到线之前, 行人通过 //遍历 n 个点第二种情况:车到线之后,行人通过 //即行人等了x分钟之后, 开始过马路, 刚好可以安全通过, nlogn 二分答案 + 遍历 n 个点Y ( ^ _ ^ ) Y 实数级的二分法最开始用的 eps = 1e-6, Wrong answer on test 3然后改成 eps = 1e-9 就过了。二分部分的代码 double l =

2016-09-16 21:30:33 1316

原创 Codeforces Round #371 (Div. 2) D. Searching Rectangles 平面矩形二分法、交互题

平面矩形二分法、交互题先切一条与x轴平行的线把 2个矩形分隔开, 然后变成从 框框类确定一个矩形的坐标这样的子问题,对于那条与x轴平行且把2个矩形分隔开的线可以通过 二分法 logn的复杂度找到,如果没有与x轴平行且把2个矩形分隔开的线, 则 比有一条 与 y轴平行且把2个矩形分隔开的线, 也是 logn的复杂度可以找到然后确定单个矩形所在的大致区域以后 可以 分成4次 用 4个二分 分别二分x = x1, x = x2, y = y1, y = y2 这4条线, 确定一条线以后就确定了一个相应的坐

2016-09-16 03:44:46 1334

原创 Codeforces Round #371 (Div. 2) C. Sonya and Queries 压位、二进制来状态压缩

压位、二进制来状态压缩根据 ai的各个digit的奇偶可以把它状态压缩到一个 Ind比如 Ind = 0;然后最右边以为是 奇数 则 Ind += pow2[0];如果是 右边第二位是奇数则 再 Ind += pow2[1]如果是偶数则先对应的二进制是0,所以不要 更新 Ind这样 对于 每个 ai 都唯一对应一个 Ind而且 ai < 1e18, 所以最多18个二进制位就可以存放所有状态, Ind <= 2^18; 1、'+' 的时候, ans[Ind]++;2、‘-’ 的时候, an

2016-09-16 03:18:32 1198

原创 Codeforces Round #371 (Div. 2) B. Filya and Homework STL(map or set)

STL(map or set)把所有的数丢进一个map,然后如果 mp.size() > 3 必然 NO;如果 mp.size() <= 2 必然 YES; //如果是 1 则 x = 0, 如果 是 2 则 x = 大 - 小 如果 mp.size() == 3 则 如果 大 + 小 = 2 * 中 则 YES, 否则 NO;

2016-09-16 02:57:24 1350

原创 Codeforces Round #371 (Div. 2) A. Meeting of Old Friends 数学、A题第三次被系统hack了 (┬_┬)、集合交集

数学、A题第三次被系统hack了 (┬_┬)虽然比赛期间 趁机 hack 了一份C++的A题代码 和 两份 python的A题代码, 他们都是简单错误, 都是 l > r 出现负数了笔者自己是分类讨论的, 所以不会出现 l > r 从而出现负数的情况, 但分类讨论中 有个地方 应该是 if(d < a) ans = 0; 写成了 if(d <= a), (┬_┬) 小于写成了小于等于以后一定要仔细考虑 == 什么时候取到啊, 这里一个小忽视, 直接 从 371 名 稳涨分的名次调到了 846名 ⊙﹏⊙

2016-09-16 02:31:41 993

原创 Codeforces Round #366 (Div. 2) C. Thor 数据结构、队列优化

数据结构、队列优化queue<pair<int, int> > que; //用来存放应该 操作3 后 剩余的通知queue<int> v[maxn]; //v[i]用来存放,剩余的未读的应用 i 的通知 所有通知 在que里入队一次出队一次, 在v[maxn]里入队一次出队一次, 总复杂度 2*n, 所以复杂度 O(n)此外 这里输出的东西 比较多, 用 cout << cnt << endl; 的运行时间 大约 是 cout <<

2016-09-12 13:35:31 1230

原创 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair 离散化+树状数组

离散化+树状数组把祖先节点的值 作为下标 插入的树状数组里, 即 val 的位置插入一个 1, add(val, 1), 然后到当前位置是 get(k / val) 就是 当前满足条件的祖先节点,回溯的时候把当前的祖先节点pop掉, 即 在 val 位置 插入 一个 -1 , add(val, -1) 这样 就可以维护成 树状数组里记录的 都是当前节点的祖先节点 也是 所有祖先节点。然后就是 val < 1e9, 直接使用 树状数组必然不行, 所以 我们 进行离散化, 把 n 个 val[i] 和

2016-09-11 02:24:28 1241

原创 Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 二进制树、Trie

二进制树、Trie用一个二进制树(字典树的一种特殊化)来储存child[x][k] 表示以x为父节点, k 为边, 的子节点sz[x]表示这个节点的值, 值为0的时候节点不存在查询的时候, 从根开始走, 尽量去走 和 val 的当前二进制为不相等的节点, 此时的二进制异或为 1 , k = ((val >> i) & 1) ^ 1, res ^= 1 << i; 如果没有再走二进制为相等的节点 if(!sz[chil

2016-09-09 02:17:36 1192

原创 Codeforces Round #367 (Div. 2) C. Hard problem 朴素dp、线性dp

状态定义:LL dp[maxn][2]; dp[i][0] 表示前 i 个字符串 按字典序排列, 且第 i 个字符串不翻转 的 最小花费dp[i][1] 表示前 i 个字符串 按字典序排列, 且第 i 个字符串翻转 的 最小花费初始化: dp[i][0] = dp[i][1] = INF边界: i == 0, dp[i][0] = 0, dp[i][1] = c[i];状态转移方程: if(dp[i - 1][0] != INF) if(s[i] >= s[i - 1]) dp[i][0

2016-09-09 02:00:51 825

原创 Codeforces Round #367 (Div. 2) B. Interesting drink 离线操作

离线操作朴素的离线操作 O(n)把询问记录下来,然后根据值排序, 然后 扫一遍数组就出来了然后把offline[maxn]根据下标Ind排序,然后依次输出就好了复杂度 O(n)

2016-09-09 01:45:20 843

原创 Codeforces Round #369 (Div. 2) D. Directed Roads 图论、组合学、二重dfs、并查集形式的图、Interesting、好题

图论、组合学、 二重dfs、并查集形式的图、Interesting、好题可以把图分成两部分, 另一部分是链状的 方案数是 2^k次(k条边), 一部分是很多的环((C m, 1) + (C m, 2) + (C m, 3) + ...... + (C m, m - 1) == 2^m - 1 - (C m, m) == 2^m - 2)并查集形式的图, 一个节点自由一个父节点, 可能有环 father[ i ] = ai;每个i, dfs, 访问到这个i访问过的节点是, 说明 有环, 然后进行 ind

2016-09-06 19:06:06 780

原创 Codeforces Round #369 (Div. 2) C. Coloring Trees 数位dp,好题

数位dp, 好题状态定义 dp i j k 为 当前在 从左往右 第 i 位, 且 以 j 结尾, 已经有 k 个片段初始化 dp[ i ][ j ][ k ] = INF边界 if(i == 1) ......状态转移方程 if(val[ i ] == 0) dp[ i ][ j ][ k ] = min(dp[ i ][ j ][ k ], dp[ i - 1 ][ x ][ k - 1] + p[ i ][ j ]); // x = 1 ~ m, x != j

2016-09-06 18:25:34 910

原创 Codeforces Round #369 (Div. 2) B. Chris and Magic Square 数学、幻方

数学、幻方读入的时候记录好缺口的坐标 x, y优先判断每行都相等, 然后求出 ans缺口的值如果 ans <= 0 则无解, 否者就填上去 //!Wrong answer on pretest 7 的原因然后判断每列, 以及2条大的对角线复杂度 O(n^2)

2016-09-06 18:13:38 616

原创 Codeforces Round #340 (Div. 2) D. Polyline 计算几何,折线

几何,折线题意 给出3个点的坐标, 用折线把3个点连起来,要求每个线段 parallel to the coordinate axes(平行于坐标轴),然后线段没有交叉 和 self-touches(可能是说不能成环), 求出需要的最小的线段个数所以, 如果(x1 == x2 && x2 == x3) || (y1 == y2 && y2 == y3) 则可以一条线段 如果 (x1 == x2) || (x2 == x3) || (x1 == x3) || (y1 ==

2016-09-01 01:39:18 1120

原创 Codeforces Round #340 (Div. 2) C. Watering Flowers 计算几何、圆和点

O(n)的预处理出所有点到到那个圆心的距离,val[i].r1 val[i].r2;然后 对于每个val[i]. r1 扫一遍 val[j], 当 val[j].r1 > r1 的时候 更新 r2 = max(r2, val[j].r2); 就像这个图然后对应每个i, 更新一次ans, ans = min(ans, r1 + r2);然后就是可能会都是只用到一个圆心,所以在放一个点 val[n].r1 = 0; val[n].r2 = 0)进去(val[n]), 所以从 0 到 n 考虑 n +

2016-09-01 01:23:15 1092

原创 Codeforces Round #340 (Div. 2) B. Chocolate 组合学、简单题

0 1 0 1 0 1 0从左向右遍历, 遇到第一个1后开始算(ans = 1), 然后连续的cnt个0 碰到隔断连续0的1的时候 ans *= cnt, cnt = 0, 然后继续访问这样就把左端的连续0和右端的连续0去掉了2 发 Wrong answer on test 7尴尬 最开始的时候只包括了 0 1 0 1 0, 1 0 1, 1 1 1 1 1 1这些情况,但漏了0 0 0 0 0 0,所以初始化为 ans = 0; // 最开始的时候是初始化为 1 的复杂度 O(n)

2016-09-01 01:02:21 625

空空如也

空空如也

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

TA关注的人

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