☺藏题阁☺
文章平均质量分 91
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #353 (Div. 2) A. Infinite Sequence 思维题
被cha了,(┬_┬), 原因是用 (b - a) * c >= 0 来表示(b-a) 与 c同号, 或b - a == 0.这里int * int 溢出了,以后还是基本上不要这样,写了。老老实实的 ((t>=0&&c > 0)|| (t<=0 && c < 0)) 这样写吧。如果 c == 0, 则 a == b 则YES 否则 NO如果c != 0, 则看看能不能整除, 同时 (b-a) 要与c同号(如果 b与a不相等)原创 2016-05-17 19:33:18 · 2792 阅读 · 1 评论 -
Codeforces Round #353 (Div. 2) B. Restoring Painting __ map or set 、思维题
自己画一个3*3的方格图, 然后标上 a, b, c, d 然后发现左上角标上x, 中间标上y,然后剩余3个空格可以表示出来。故可以O(n)的来做扫一遍,过程中用ans[][][][]来表示那个状态的个数。最后得到不同的个数然后n*ans.size()就好了,(n 表示中间的数字的可能情况总数为n), 然后注意可能溢出就好了……Solution 2 建一个结构体 q, 然后四个成员 ru(rights up), lu(lest up), ld(lest down) and rd(right dow原创 2016-05-17 19:50:02 · 3164 阅读 · 1 评论 -
Codeforces Round #353 (Div. 2) C. Money Transfers 环、贪心、前缀和推广、好题
首先最多是ans = n-1次,这个时候只有sum总是0;否则, 只有 有一个小区间是 0, 则ans就少1次;所以要找到,尽可能多的sum == 0 的区间。当时一直不知道,环该怎么处理,结束了,后来才想明白, 环不没有影响, 可以把 j ~ n 和 1 ~ i 这个设定为最后一个sum为0的区间,所以找 1 <= i <= j <= n 内的尽可能多的sum == 0的区间就好。环就是两种情况,j~n和1~i分别是两个最短的sum==0的区间;或者j~n和1~i一起组成了一个sum==0的原创 2016-05-17 20:03:19 · 1915 阅读 · 1 评论 -
2016 UESTC Training for Search Algorithm & String E - 吴队长征婚 dfs剪枝、好题
好复杂的搜索剪枝(┬_┬) 看了原题的一些结题报告 1. 搜索顺序。首先依据小棒长度进行由大到小的排序,在每一层搜索时首先将长度大的小棒填入 当前原棒中。因为当相对长的小棒占据了原棒的大部分空间后能大大减小可行的搜索状态。 2. 利用排序剪枝。在组合同一支原棒的时候,由于检验小棒是否可用的顺序也是由大到小的,因此在检验到一支小棒可用时,如果当前棒还合填满,可能填入当前棒的小棒的长度也不会比现在填入的这支小棒长。因此,增加一个递归参数NEXT表示可能用于组合当前棒的第一支原创 2016-06-10 10:54:44 · 816 阅读 · 0 评论 -
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 评论 -
UESTC 2016 Summer Training #1 Div.2 F - Mission in Amman (A) 动态维护(刷新:--、++)
先整体的处理一遍,然后边输入操作, 边维护, 什么时候++, 什么时候--这样直接边跑边维护, 挺常见的, Codeforces上见过好几次^_^原创 2016-07-12 21:15:31 · 1704 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 L - Plus or Minus (A) dfs
dfs就好, 好久没用写dfs了,简单dfs还是Debug了好长时间, 尴尬⊙﹏⊙‖∣记得把那些转移的东西写在参数里读入char类型, 记得看看要不要用getchar吸掉换行空格什么的原创 2016-07-12 21:32:05 · 1557 阅读 · 0 评论 -
UESTC 2016 Summer Training #2 Div.2 A dp、递推、多阶段问题
训练的时候刚开始想到的是记忆化搜索, 但无论怎么优化还是TLE 3,没办法,想想递推怎么写但是转化方程还是有点小问题, WA5然后后来才想明白只要 dp[i][j] = max(dp[i+1][j], dp[i][j+1]) + s[i][j]; if(dp[i][j] > 0) dp[i][j] = 0;这里不要讨论s[i][j]的正负,都是直接加上s[i][j]就好了然后处理好边界就好了dp检查的时候应当着重与转移方程啊⊙﹏⊙‖∣原创 2016-07-13 00:59:18 · 1390 阅读 · 0 评论 -
Gym 100541 B. Sum 分块的技巧、思维题、Interesting
写几个n试试看, 会有连续的数字出现, 比如n == 5, 5 2 1 1 1n == 8, 8 4 2 2 1 1 1 1相当于把这些数据分成好多块, 最多sqrt(n)份,区别于数据结构分块的另外一种分块吧^_^len 表示相同数字的个数, 然后i表示这些相同val (LL)的第一个数的下标, ans + len*val //然后注意每一步取模i += len; //直接跳到下一种val的第一个数其中 len = n / val - i + 1原创 2016-07-26 01:37:07 · 1368 阅读 · 0 评论 -
URAL 2098 Lada Priora 卡精度
直接算就好了这个题目的难点是精度损失1)其中有一个*p%然后求和的地方,这样每次得到一个double对象, 然后求和这样精度的损失比较严重所以应当想求和, 最后再 /100得到答案2)此外, 对于if(b >= ans/100) 这样出现浮点数的比较时, 把除的 非负数移到对面去 变成 if(b*100 >= ans)原创 2016-07-28 00:01:22 · 1684 阅读 · 2 评论 -
UESTC 2016 Summer Training #4 Div.2 B - ฅ(*`ω´*)ฅ 有趣的思维题
读懂题意很重要嘿嘿, 就是先每个1个数删去一个数, 然后 在剩余的数字里 每隔2个数删除一个数, 然后又在剩余的数里每隔3个数删除一个数, 一次类推反正笔者自己觉得这个题挺有意思的,嘿嘿^_^原创 2016-07-17 23:21:12 · 1251 阅读 · 0 评论 -
UESTC 1170 红与蓝 计算几何、贪心、红蓝点对
贪心的做法预处理所有Ai到O的距离, 然后根据距离排序, 之后依次对每个Bi也求出BiO, 然后二分查找, 然后处理最近的+-100个点, 答案必定在这100或者1000个点之内比赛的时候是+-100 共200个点Accepted的然后比赛结束后试了一下, 我这样的方法至少要+-40 共80个点才能通过那个题目的数据测试好像还有专业计算几何的算法 红蓝点对 ☺☺原创 2016-07-28 22:11:54 · 1684 阅读 · 1 评论 -
URAL 2026 Dean and Schedule 贪心、双端队列(deque)、队列(queue)
贪心, 双端队列、队列先扫一遍记录各种字母出现的次数, 然后在扫一遍字母数组(从大到小),依次记录没有出现过的字母然后 扫一遍 分别记录奇数位置的'?' qo.push(i), 偶数位置的'?' qe.push(i) 同时如果'?'的个数 + 已经出现的种类数 < k 则 输出 -1否则就可以了, 然后每次 if(26 - deq.front() > deq.back()) 来判断应该填优先填 minus的位置还是 plus的位置,(同时应该先判断是否容器为空)具体见代码复杂度 O(n)原创 2016-07-31 00:44:11 · 1684 阅读 · 2 评论 -
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 评论 -
Codeforces Round #367 (Div. 2) B. Interesting drink 离线操作
离线操作朴素的离线操作 O(n)把询问记录下来,然后根据值排序, 然后 扫一遍数组就出来了然后把offline[maxn]根据下标Ind排序,然后依次输出就好了复杂度 O(n)原创 2016-09-09 01:45:20 · 866 阅读 · 0 评论 -
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 · 841 阅读 · 0 评论 -
Petrozavodsk Winter-2013. Ural FU Contest Problem D. Five Palindromes manacher、一个串切割成5个回文子串、优化
manacher、一个串切割成5个回文子串、优化第一次使用manacher 嘿嘿☺☺为了方便处理奇偶的情况, 我们把 区间 [ i , j ] 的回文子串半径保存在 len[ i + j ] 里, if(len[ i + j ] >= (j - i)/2 + 1) 则[ i , j ] 为回文串可以O(n)的处理出len 所有中心的回文子串长度这里先跑一边 manacher(n) 得到 len[]数组然后O(n) 的预处理出 第一个字符串的右端点 i,放在一个队列里并且O(n) 的预处理出 最原创 2016-08-19 23:38:40 · 1473 阅读 · 2 评论 -
Moscow Subregional 2010 Problem J. Joke 好题,卡精度卡到爆,大整数类
好题 卡精度题面很简单 就是求[ x / y ] , 但可以WA到爆,可以WA到怀疑人生, 可以WA到比赛结束, (WA了14发, 才在比赛开始后 2 : 12 Accepted ⊙﹏⊙‖∣)刚开始的方法是 把 x, y都扩大个 1e9后赋值给long long 但好像有地方溢出了, WA10然后改成 *1e4 结果 WA24, 然后改成 *1e6 WA10, 然后改成 *1e5 结果 WA28接着试着想用字符串来写, 还没有写好, 然后队友说可能爆long long了, 然后自己也想了一下, 可能原创 2016-08-09 00:34:05 · 1139 阅读 · 0 评论 -
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 · 1249 阅读 · 0 评论 -
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 · 1104 阅读 · 0 评论 -
Gym 100952E E. Arrange Teams dfs、剪枝
dfs、剪枝首先用 pai[][]布尔数组双向的记录 那些 pair然后void dfs(int k) 表示当前正在处理 队伍 k, 然后遍历 所有 i, j 如果没有访问过, 并且满足条件 则dfs(k + 1)直到顺利的把所以的t个队伍都填进去了, 那一个分枝才ans++; return;剪枝以后的复杂度不大算的出来, 嘿嘿, 但看数据大小 (1 ≤ n,m ≤ 11) and (1 ≤ t ≤ 10) 这样做一般可以pass the tests原创 2016-08-11 01:14:29 · 1017 阅读 · 0 评论 -
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 · 1257 阅读 · 0 评论 -
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 · 1009 阅读 · 0 评论 -
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 · 1209 阅读 · 0 评论 -
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 · 1207 阅读 · 0 评论 -
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 · 1352 阅读 · 0 评论 -
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 · 643 阅读 · 0 评论 -
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 · 924 阅读 · 0 评论 -
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 · 798 阅读 · 0 评论 -
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 · 1416 阅读 · 0 评论 -
Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn LCA(最近公共祖先)
LCA(最近公共祖先) 在有根树中,找出某两个结点u和v最近的公共祖先(或者说,离树根最远的公共祖先)。类似于这样来访问 ......每次修改的时候直接修改就行1e18 -> 2^63次所以每次 2*63*q == 1e5 复杂度 O(2*63*n)此外对于 map<pair<LL, LL>, LL> mpt;//map tree和 map<LL, map<LL, LL> > mpt;//map tree前面用 Codeforces上的数据做了测试, 这两种写法时间上是差不多的, 然而在空间原创 2016-08-23 23:29:01 · 1255 阅读 · 1 评论 -
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 · 1639 阅读 · 0 评论 -
Codeforces Round #377 (Div. 2) D. Exams 二分+贪心 or 纯贪心水过
二分+贪心 or 纯贪心水过/*!!!!!!1、纯贪心水过,事实上并不对比赛的时候是纯贪心水过了,后来经过同学和热心读者们的提醒,发现纯贪心是水过去的,事实上并不对,抱歉......2、二分+贪心二分右端点,然后check [0, x) 能不能满足条件,然后可以则 r = x, 否则l = x;关于check()函数,从右端点往左扫一遍,只留下最靠右的相同d[j]值,然后从左往右贪/*贪心的策略就是"1、纯贪心水过的策略"*/最后的r就是答案了,当 r == l 是 可能是没有答案也可能答案原创 2016-10-18 02:26:21 · 1323 阅读 · 8 评论 -
Codeforces Round #376 (Div. 2) F. Video Cards 数论+数据结构+前缀和
数论+数据结构+前缀和就是以前用树状数组的感觉,比如有一个数x,就在以x为下标的地方插入一个 1,如果删除这个就在下标为x的地方插入一个-1, 这样要查询小于等于k的数的个数只要get(k)就好。这里不需要维护,所以只要用一个前缀和数组,就可以直接预处理出来。即对于每个a[i]就在 sum[a[i]]++;读入完以后预处理出前缀和,for i = 1 ~ maxa, sum[i] += sum[i - 1];然后扫一遍i = 1 ~ maxa,对于每个i在a[maxn]数组中出现过的i,(即 s原创 2016-10-22 12:56:44 · 1395 阅读 · 0 评论 -
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 · 1448 阅读 · 0 评论 -
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 · 1533 阅读 · 0 评论 -
Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) D. Dense Subsequence ST表+贪心
ST表+贪心ST表,用O(nlogn)的预处理,然后O(1)查询,找出ans中出现的最大的字母,然后把比它小的字母都从小到大push到ans里,然后贪心的去那个需要的最大字母的个数,每次if(maxv == query_min(i, i + m - 1)) 则在这个 [ i, i + m -1 ]区间内找出最右端的一个maxv + 'a' 字母,//如果优先选左边的,则右边的还会取到,所以取区间最右边的maxv+'a'就好。复杂度 O(nlogn)原创 2016-10-14 01:32:50 · 856 阅读 · 0 评论 -
Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C. Ray Tracing 模拟+预处理、几何
模拟+预处理、几何首先每个点只有 2 条 abs(k) == 1的直线, 并且每条线最多经过一次,即每个店做多经过2次, 所以复杂度是O(n)的,模拟是可行的故先在读入的时候把该点 对应的 2 条 abs(k) == 1的直线 然后分别求出 他们与 矩形边框的2个交点 a(x1, y1),b(x2, y2) cnt[make_pair(a, b)].push_back(x, y); 即x, y 在 线段(a, b) or (b, a)上然后初始的时候 x0 = 0, y0 = 0; if(n <原创 2016-10-13 23:39:01 · 1005 阅读 · 0 评论 -
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 · 1019 阅读 · 0 评论