Codeforces
HumveeA6
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Educational Codeforces Round 40 D. Fight Against Traffic
题意大致就是给定一幅无向图,起点,终点,然后问在那些没有用一条路不经过其他点直接连通的点之间连新的路,并且新的路不应该改变起点到终点的最短距离,问这样的路有多少条; 朴素25%的算法,就是枚举所有的点对,然后如果两个点之间没有直接的路,就加一条然后跑最短路,与原距离比较。从第8个点开始就会tle…. 比较机智的算法就是,以s,t分别为起点跑一次最短路,然后枚举所有没有直接相连的两个点a,b,如...原创 2018-03-22 22:09:45 · 219 阅读 · 0 评论 -
Educational Codeforces Round 38 (Rated for Div. 2)
A. 签到模拟题#include<cstdio>#include<iostream>#include<string>#include<algorithm>using namespace std;bool isvowel(char c){ return c=='a'||c=='e'||c=='i'||c=='o'||c==...原创 2018-05-25 16:42:29 · 244 阅读 · 0 评论 -
Codeforces Round #476 (Div. 2) [Thanks, Telegram!]
A.纯粹签到 B. 用两个前缀和维护一下每个位置的连续的可放位置的累计数(横向与竖直方向),然后枚举每个位置即可。#include<cstdio>#include<iostream>#include<string>#include<cstring>using namespace std;int cnth[105][105],cn...原创 2018-05-08 17:58:49 · 237 阅读 · 0 评论 -
Educational Codeforces Round 44 (Rated for Div. 2)
A. 注意到是全部放在黑格或者全部放在白格就可以,那就暴力枚举呗。把棋子按位置排序之后依次放在最左边空着的格子上统计一下就OK了。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<set>#include<...原创 2018-05-22 21:02:31 · 280 阅读 · 0 评论 -
Codeforces Round #481 (Div. 3)
比较简单的一场,除了个别题目需要小心一些细节之外都很裸很暴力; A. xjb乱搞就行。#include<cstdio>#include<iostream>#include<algorithm>#include<vector>using namespace std;bool appear[1005];int main(){ ...原创 2018-05-23 15:56:31 · 275 阅读 · 0 评论 -
Codeforces Round #489 (Div. 2)
A. 稍加思考就会发现其实只要知道其中非0的不同的数有多少个就可以了。#include<cstdio>#include<iostream>#include<set>using namespace std;int main(){ int n,i,j; set<int>s; cin>>n; ...原创 2018-06-20 21:31:05 · 305 阅读 · 0 评论 -
Codeforces Round #485 (Div. 2)
A.暴力乱搞 B.找规律,会发现(2,3)(2,4)以及有一个数是1的时候是需要特判的,其余情况下小的那个数的幂次方总是比较大。#include<cstdio>#include<iostream>using namespace std;int main(){ int x,y; cin>>x>>y; if(x=...原创 2018-05-30 16:15:59 · 424 阅读 · 0 评论 -
Codeforces Round #462
A.题目不难,但是如果想要用一些巧妙的方法去做的话….会变得很麻烦,要非常仔细地考虑各种可能。然而题目数据范围是如此的小,所以还不如暴力枚举所有的乘积,然后把最大的乘积所在的那一组数全部删掉,也就是第一个人应该删掉那个数。然后在剩下的数里找最大的数即可。#include<cstdio>#include<iostream>#include<algorithm...原创 2018-05-31 23:55:23 · 275 阅读 · 0 评论 -
Codeforces Round #490 (Div. 3)
A. 直接拿个deque模拟一下就完了#include<cstdio>#include<iostream>#include<deque>#include<algorithm>using namespace std;int main(){ int n,k,i,j,cnt=0; cin>>n>>...原创 2018-06-22 21:44:16 · 377 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2)
A. 简单的容斥原理,注意一些奇怪的大小问题即可。#include&lt;cstdio&gt;#include&lt;iostream&gt;using namespace std;int main(){ int a,b,c,n; cin&gt;&gt;a&gt;&gt;b&gt;&gt;c&gt;原创 2018-06-29 21:43:16 · 251 阅读 · 0 评论 -
Codeforces Round #493 (Div. 2)
A. 其实3袋或以上是一定可以满足题目要求的,枚举一下即可#include<cstdio>#include<iostream>using namespace std;int main(){ int n,i,j,k,sum=0; cin>>n; if(n==1){ cout<<-1<<...原创 2018-07-08 09:46:38 · 301 阅读 · 0 评论 -
Codeforces Round #494 (Div. 3)
A. 显然统计一下最多的那个就可以了#include<cstdio>#include<iostream>#include<map>using namespace std;int main(){ int n,i,j,k; map<int,int>mp1; cin>>n; for(i=1;i...原创 2018-07-08 15:57:33 · 218 阅读 · 0 评论 -
Codeforces Round #495 (Div. 2)
A. 直接模拟或者统计相邻两点距离与d*2的关系即可。 当时写的直接模拟,代码不是很好看#include<cstdio>#include<iostream>#include<cmath>#include<set>using namespace std;int loc[105];int main(){ int n,d,...原创 2018-07-09 11:23:28 · 261 阅读 · 3 评论 -
Codeforces Round #488 by NEAR (Div. 2)
A.#include<cstdio>#include<iostream>#include<set>#include<algorithm>using namespace std;int main(){ int n,m,i,j,k; set<int>s; cin>>n>>m;原创 2018-07-10 09:55:21 · 262 阅读 · 0 评论 -
Codeforces Round #487 (Div. 2) C. A Mist of Florescence
构造的思路比较暴力,如图。 但是代码其实不太好写#include<cstdio>#include<iostream>using namespace std;int main(){ int i,x,y,c[4]; for(i=0;i<4;i++)cin>>c[i],c[i]--;//预留一个给大的包围块 cout&...原创 2018-07-10 10:07:40 · 281 阅读 · 0 评论 -
Codeforces Round #496 (Div. 3)
A. 统计1的个数即可,注意最后一个数必定是某个台阶的最后一级也就是级数即可。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;int main(){ ...原创 2018-07-10 22:22:54 · 349 阅读 · 0 评论 -
Educational Codeforces Round 36 (Rated for Div. 2) C. Permute Digits
显然我们是想求一个满足条件的字典序最大的排列,那么对于每一位,我们从可放置的最大数出发,找出在当前状况下后续能排出的最小序列,跟b比较,如果最小序列比b小,那么这一位就可以放最大的数。#include<cstdio>#include<iostream>#include<algorithm>#include<string>using n...原创 2018-07-12 10:39:43 · 340 阅读 · 0 评论 -
Codeforces Round #479 (Div. 3)
A,B送分签到。 C的话暴力搞法直接排序,然后看看第k个数跟第k+1个数是不是一样就好了,但是一定要特判k=0||k=n的情况,wa了两发非常zz。当然想跑得更快可以二分搞搞。#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;algorithm&gt;using namespace std;int num[2000...原创 2018-05-08 15:50:26 · 243 阅读 · 0 评论 -
Codeforces Round #484 (Div. 2)
A. 记得特判n=1时的情况即可。#include&amp;amp;lt;cstdio&amp;amp;gt;#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;algorithm&amp;amp;gt;#include&amp;amp;lt;cstring&amp;amp;gt;#include原创 2018-05-19 10:23:02 · 253 阅读 · 0 评论 -
Codeforces 466 Div2
A签到题略过。 B虽然不难但仔细讨论起来还挺麻烦的,不想清楚容易GG。 #include<cstdio>#include<iostream>using namespace std;int main(){ long long n,k,a,b,i,j; cin>>n>>k>>a>>b; lo...原创 2018-04-27 13:30:34 · 312 阅读 · 0 评论 -
Educational Codeforces Round 40 E. Water Taps
这道题目的做法似乎非常奇妙。首先,对于每个温度,我们减去标准温度,只考虑差的部分。 然后,这样一来剩下的温度必然有正有负,那么,我们其实是希望知道是正的温度比较多还是负的温度比较多的,这样我们就可以把比较少的那种温度全部选上,然后贪心地选取比较多的那种温度,直到总温度为0 那么,就可以把总温度加起来算一遍,然后,如果总温度是负,也就是负温度比较多,那自然就没问题了。但如果是正温度比较多,那么...原创 2018-03-23 20:02:10 · 303 阅读 · 0 评论 -
Educational Codeforces Round 40 C. Matrix Walk
挺有技巧的一道题….需要考虑的细节不少,但是如果够机智,代码可以非常简单 注意到只能上下或左右走,而左右走时,绝对值差必为1;上下走时,绝对值差可能不为1,但一定相等,且为一行的元素数。 如此,只要判断序列中所有相邻数的绝对值差是不是只有两种可能。 但是,有一种特殊的情况:从一行末尾走到上/下一行开头是不合法的。这种情况需要特判。 由于题目并不要求最小的x,y,所以可以直接令x=10^9,...原创 2018-03-24 17:21:04 · 272 阅读 · 0 评论 -
Educational Codeforces Round 40 G. Castle Defense
题目要求最大化最小值,因此肯定要二分答案了; 那么二分了之后怎么检查呢?对于从左往右的第i个城堡,如果它的防御值不满足二分的x的话, 那么考虑到他左边的城堡都满足了这个x值,因此弓箭手肯定加在i+rad上最佳。 然后怎么扫,一开始以为要用线段树或者树状数组维护前缀和,然后都tle GG了 后来发现其实拿两个指针,一个指向左边,一个指向右边,维护这一段的和即可,每次检查复杂度大概是线性的,可...原创 2018-03-24 20:54:11 · 299 阅读 · 0 评论 -
Codeforces Round #474
A.注意两个问题,一个是必须是排好序,也就是abc位置不能颠倒,其次就是a,b不能没有。 利用is_sorted可以快速解决第一个问题。#include<cstdio>#include<iostream>#include<string>#include<algorithm>using namespace std;int main(...原创 2018-04-09 16:37:40 · 216 阅读 · 0 评论 -
CF 472B Mystical Mosaic
刚开始的时候考虑过各种暴力,不过似乎都太复杂了以至于写着写着就出错了或者写不下去了。这题其实有非常简便的做法。对于矩阵中的每一列,如果在该列的某一行处是”#”,那么在选中该列的同时该行也是一定要同时选中的。那么,对于任意的两列i,j,如果他们需要选中的行一样,OK,没问题,这两列可以在同一次选择中被选中。但是,如果i,j需要选择的行不一样,那么他们肯定就不能在同一次中选择了,否则的话这两列肯定会多...原创 2018-03-28 15:49:33 · 417 阅读 · 0 评论 -
CF 472D Riverside Curio
一直以为是dp或者搜索之类的,搞了半天发现并不是qwq….这道题其实应该从一个比较整体的角度来考虑, 首先,我们要最小化每天的d,因为每天的划线总数是ti=di+mi+1,因此实际上我们就是要最小化每天的t。 很显然的,t必须满足几个条件:1.t[i]>=t[i-1],总不可能线越划越少吧。2.t[i]>=m[i]+1,这也是废话 3.t[i]>=t[I+1]-1,这是因为...原创 2018-03-28 20:12:20 · 347 阅读 · 0 评论 -
CF473 DIV2 D. Mahmoud and Ehab and another array construction task
本题基于一种贪心的思路,即:能不改就不改,但是一旦改了以后,后面的都改;具体而言,就是从前往后扫,如果当前位置的数不与前面的数冲突的话,那么我们就不改动他。但是,一旦有一个数冲突了,根据题意我们肯定要换一个更大的数,那么此时整个序列肯定就比原序列大了,那么后面的数我们肯定都要换尽可能小的。 同时,还要考虑的一个问题是,如何保证后面选的数不与前面已经选过的数冲突。方法非常暴力:我们预处理出每个数的...原创 2018-04-04 16:36:19 · 444 阅读 · 0 评论 -
Codeforces Educational Codeforces Round 41
A,B签到题略过。 C. Chessboard 其实这题的思路很简单,但是如果没想到的话还是挺难的….简单来说,我们并不需要去具体考虑4块中的每一块具体放在哪里——因为对每一块来说,他的最终状态只有两种可能,并且这个可能是由它的左上角的小方块的颜色决定的;那么我们其实只要计算出每一块转换为两种状况所需要重新染色的次数,然后显然左上角与右下角的块状况相同,另两块状态也相同,那我们在两种状况中选择...原创 2018-04-05 20:21:17 · 277 阅读 · 0 评论 -
Codeforces 468 Div2
A.签到,没啥好说#include<cstdio>#include<iostream>using namespace std;int main(){ int a,b,i,total=0,mid; cin>>a>>b;mid=(a+b)>>1; if((a+b)&1){ in...原创 2018-04-22 21:35:18 · 222 阅读 · 0 评论 -
Educational Codeforces Round 42 (Rated for Div. 2)
A. 记录一下前缀和,二分找一下超过一半的地方就行了。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int main(){ int n,i,j,sum[200005]={0}; cin>>n; for(i=1...原创 2018-04-22 23:10:52 · 215 阅读 · 0 评论 -
Codeforces Round #475 (Div. 2) C
这题做起来感觉挺坑的。。。大概是不习惯这种数学题吧,也可能是这次前两题太简单了? anyway,首先如果暴力去算每一个数的值肯定是tle的,注意到这是以k为周期的,那么我们其实可以先算出前k个数的和,然后对于后面的数,每k个一组,每组的和都是上一组的和*(a^k/b^k),这里要求一波乘法逆元。1e9+9是质数所以费马小定理搞一下就行。然后这些和怎么加呢?如果一个个去加也是会tle的…所以就祭出...原创 2018-04-23 23:36:55 · 208 阅读 · 0 评论 -
Codeforces Round #477 (rated, Div. 2)
C. 题目主要考察阅读理解。 对于每一组问询,答案肯定是水平走一段+电梯/楼梯走一段组合而成。之前考虑的是 有没有可能做一段电梯然后走最后一截楼梯,不过从各种别人的代码来看似乎不需要考虑这点?似乎只要对于每个问询,把离起点最近的两个电梯/楼梯都二分抓出来算一下就行了。 特别注意要特判那些两点在同一层的坑爹情况…#include<cstdio>#include<algo...原创 2018-05-02 19:59:25 · 208 阅读 · 0 评论 -
Educational Codeforces Round 43 (Rated for Div. 2)
B. 找找规律就行,注意细节#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;int main(){ ll n,m,k,i,j,r,c; cin>>n>>m>...原创 2018-05-03 10:46:45 · 193 阅读 · 0 评论 -
Codeforces Round #482 (Div. 2)
B. 大意就是尽量弄成单个字母那种,这一定是最优的。我们首先扫一遍当前序列,找出当前情况下出现次数最多的子串(字母),然后如果除了这个字母以外,剩下的字母个数比n大的话,答案就是出现次数+n。 否则,如果替换剩下所有字母后n还剩偶数次,那么我们随便找一个字母消磨掉次数即可。否则的话,最后一个字母被替换掉我们不做替换,这样剩下偶数次,头两次内我们把那个没换的字母换成我们想要的字母,然后消磨掉...原创 2018-05-17 23:50:01 · 255 阅读 · 0 评论 -
Codeforces Round #483 (Div. 2)
B. 全部扫一遍即可,注意每个点相邻的点可以有8个之多。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;char map1[105][105];int move1[8][2]={-1,0,1,0,0...原创 2018-05-18 00:10:13 · 232 阅读 · 0 评论 -
Codeforces 467 Div2 D
题目非常显然可以用记忆化搜索来做,但是有几个地方需要考虑。首先是每搜到一个点的时候需要知道这个点是谁在走,虽然说可以通过记录步数来判断,但是记忆化的时候需要分开来记忆,并不是很好办。解决方案是拆点,也就是把原来的点v拆成v<<1(P走这个点)和v<<1|1(V走这个点), 如果原图中有一条u->v的边,那么我们连两条边: (u,0)->(v,1) &...原创 2018-04-27 12:55:53 · 300 阅读 · 0 评论 -
Educational Codeforces Round 46 (Rated for Div. 2)
A. 非常暴力枚举一下即可#include<cstdio>#include<iostream>#include<string>#include<map>#include<algorithm>using namespace std;int main(){ map<string,int>mp1,mp...原创 2018-07-07 20:38:27 · 281 阅读 · 0 评论
分享