
Codeforce练习
风声sp
这个人很懒,还没想到说点啥
展开
-
F - Red-White Fence
选出一个山峰一样的数列,问总长度是多少,我们发现,周长的总长只取决于最长的那一块木板和选取的模板个数,总周长就是(L+M)∗2( L + M ) * 2(L+M)∗2其次,我们考虑给木板按长度分类第一类是对应长度只有一块的,那么这个木板可以放在左边,也可以放在边,对应的次数就是ai=C(sa,i)∗2ia_i = C(sa,i) * 2^iai=C(sa,i)∗2i第二类就是对应长度有两块...原创 2020-03-12 20:42:07 · 166 阅读 · 0 评论 -
Educational Codeforces Round 83 (Rated for Div. 2)
A - Two Regular Polygons问是否可以在一个正多边形内部内接一个正多边形,可以内接,分配给内部的多边形的每一条边的角度一样,对应的外部多边形的边数一样#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;int Gcd...原创 2020-03-10 14:47:07 · 342 阅读 · 0 评论 -
Codeforces Round #597 (Div. 2)
洛谷博客传送门A - Good ol’ Numbers Coloring猜了个 GCD=1GCD=1GCD=1 过了#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;int Gcd(int a,int b){if (b == 0) ...原创 2019-11-02 10:57:30 · 235 阅读 · 0 评论 -
Codeforces Round #514 (Div. 2), problem: (A) Cashier
传送门:http://codeforces.com/contest/1059/problem/A给定客人来的时间和要接待他们的时间,然后算出自己能够有多少次的休息挨个枚举每一段的空闲时间就好啦,第i段的空闲时间是 t[i] - t[i-1] - last[i-1],然后除以a求和即可。代码如下:#include <bits/stdc++.h>using namesp...原创 2018-10-06 13:30:00 · 185 阅读 · 0 评论 -
Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2), problem: (A) Phone Numbers
传送门(懒得截图了):http://codeforces.com/contest/1060/problem/A 这个号码要求8开头,然后后面10个数字,注意到8可以在开头,也可以作为跟在其他8后的数字,那么答案就是8的个数和总个数除以11的最小值。代码如下:#include <bits/stdc++.h>using namespace std;typed...原创 2018-10-05 10:53:28 · 181 阅读 · 0 评论 -
Codeforces Round #489 (Div. 2) ---- D - Nastya and a Game
参考了别人的博客,已注明为转载这也是看了题解搞定的,这题很巧妙的利用了范围的问题,我们先略过所有是1的数,(a1 + .... + an) *k 这个的最大范围是 n*k*1e8 = 2e18,接近LL_MAX 的范围,那也就是说,对于至少为2的数来说,64个数相乘就能爆掉这个答案,因此答案连续的段去掉1之后,至多只可能有64个数,那么再考虑1,因为1对乘积没有影响,因此我们可以把连续的...转载 2018-09-15 17:05:14 · 255 阅读 · 0 评论 -
Codeforces Round #489 (Div. 2) ---- C - Nastya and a Wardrobe
这是一个求期望的题,因为每天有50%的可能出现被吃掉一件衣服的情况,因此这些每天的情况就构成了一颗二叉树根结点是x ,左节点是 x << 1 -1 右节点是 x << 1 ,那么假设有k天,根据二叉树的性质,在第k天就有2^k个节点,分别为2^k * x , 2^k*x -1 ,2^k*x - 2, 2^k*x - 3 ……2^k*x - (2^k-1) ,每个...原创 2018-09-15 16:54:18 · 216 阅读 · 0 评论 -
Codeforces Round #489 (Div. 2) ---- B. Nastya Studies Informatics
这题给了我们gcd和lcm,和范围,求在范围内有多少对这样的数满足gcd = x , lcm = y 我们可知这两个数的乘积,如果枚举它的因子非常慢O(1e9) ,因为两个数都是gcd的倍数,那么我们可以分别设他们是gcd 的k1倍,k2倍,因此就有 k1 * x * k2 * x = x * y => k1 * k2 = y / x; 而 y / x 最大 就是 ...原创 2018-09-15 16:46:10 · 275 阅读 · 0 评论 -
Codeforces Round #489 (Div. 2) ---- A. Nastya and an Array
给了我们一个数组,可以给整个数组的元素加上一个数或者减去一个数,问多少次操作之后所有的数都变成了0因为每次操作都是针对整个数组的,那么不相同的数一定不可能同时变成0,因此我们只需要对数组去重即可,然后对于已经是0 的数,我们不需要给出操作,因此如果数组中有0,答案减去1这里记录一下去重的unique函数, len = unique(a,a+n) - a 要减去a的地址,这个函数是针对相...原创 2018-09-15 16:37:23 · 189 阅读 · 0 评论 -
Educational Codeforces Round 48 (Rated for Div. 2)----B. Segment Occurrences
因为n的数据并不是很大,那么对于每一个l和r来说,我们都可以截取到substring然后对每一个这样的串做kmp算法,得到匹配成功的次数。 不过有点费解,别人的kmp好像是300ms左右,我写的到了1300ms,可能写的不是很优越。代码如下#include <bits/stdc++.h>using namespace std;type...原创 2018-08-11 20:37:40 · 194 阅读 · 0 评论 -
Educational Codeforces Round 48 (Rated for Div. 2)---- A ---- Death Note
题意有点难读懂,不过看下note就明白了,那么就对每一天记录一下写完那么多还剩下多少,除法算出个数,模数算出余数,每一天都记录一下答案即可。代码如下#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1e6 + 10;int a[maxn...原创 2018-08-11 20:32:24 · 173 阅读 · 0 评论 -
Codeforces Round #513 by Barcelona Bootcamp , problem: (B) Maximum Sum of Digit
传送门:http://codeforces.com/contest/1060/problem/B 这题没咋分析,是纯打表然后猜的规律,觉得9越多越好,那么就构造一个比n小的数,除开最高位之外全是9,那么另一个数就是n减去这个数了,然后求和,这个就是最大的sum值代码如下:#include <bits/stdc++.h>using namespace std;...原创 2018-10-05 10:58:40 · 280 阅读 · 0 评论 -
Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2), problem: (C) Maximum Subrectan
传送门:http://codeforces.com/contest/1060/problem/C 我们要找到一个子矩阵元素和小于x,元素个数最多,那么我们发现,只要从a数组中取出一段连续的元素,b中取出一段连续的元素,他们组成的矩阵一定是子矩阵,而且子矩阵元素的和为 sum = (a[i] + a[i+1] + .... + ...原创 2018-10-05 11:10:03 · 230 阅读 · 0 评论 -
Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2), problem: (D) Social Circles
传送门:http://codeforces.com/contest/1060/problem/D 感觉比c题好想多了,因为环可以有随便多个,自己和自己也可以成环,那就 记录l,和 r 然后两个数组sort一下,按下标配对就好了,配对取大的那个,所有对求和,然后加上n个人就是答案,代码如下。 #include <bits/stdc++.h>usin...原创 2018-10-05 11:15:40 · 2124 阅读 · 0 评论 -
Codeforces Round #514 (Div. 2), problem: (B) Forgery
真心觉得昨晚写这个的时候就是个傻子,硬写最后还fst19了。昨晚想到的方法对于每一个#,如果这个是一个符合条件的图,那么这个#就一定会包含在一个3X3的环内,那么这个#就有8种可能的位置,挨个去搜看有没有一个可能的位置就好。还是挺难写的这样。刚刚又想了下,每一个环,都一定会有一个中心,那么我们枚举每一个点,检测它是不是这样一个环的中心,如果是,那么久将它周围的这个环上的点都标记,那么最后扫...原创 2018-10-06 13:36:29 · 195 阅读 · 0 评论 -
Codeforces Round #514 (Div. 2), problem: (C) Sequence Transformation
传送门:http://codeforces.com/contest/1059/problem/C这个c题还挺有意思的,一开始实在是看不懂题,后来理解了,要字典序(误)最大,就必须越快增加整个数列的gcd越好。注意到这个数列是有序而且从1到n,那么先假设n比较大,这个时候gcd是1,我们要删掉最少的数让gcd改变,最少删掉多少呢?n范围内,是2这个数的倍数的数的个数,永远比是其他数的倍数...原创 2018-10-06 13:53:08 · 222 阅读 · 0 评论 -
Educational Codeforces Round 61 (Rated for Div. 2) 题解
A: Regular Bracket Sequence 判断括号是否匹配,只需要注意到 “()”这样的括号数量无所谓,每一个“((” 一定需要一个 “))” 来和它配对,每一个“)(”,只要有一对 “((” 和 “))” 就可以有任意多个 因为可以做成 “((” “)(””))“这样的形式。那么几个判断即可代码如下:#include <bits/stdc++.h&...原创 2019-03-08 11:54:52 · 227 阅读 · 0 评论 -
Codeforces Round #553 (Div. 2) E - Number of Components
要求这个所有的和,感觉不是很好想首先这个图,是一条长链。对于联通的 i 和 i+1 两个点,考虑他们对答案的贡献,如果他们不联通,那么对答案的贡献就是1对于 l <= ai <= r 同时使得 ai+1 > r || ai+1 < l 里所有的 l 和 r,对答案的贡献都是1反之对于l <= ai+1 <= r 且 ai 不在范围内,所有...原创 2019-04-20 22:45:21 · 257 阅读 · 0 评论 -
Codeforces Round #588 (Div. 2)
A#include <bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/hash_policy.hpp>using namespace std;using namespace __gnu_pbds;typedef long long LL;typede...原创 2019-09-29 00:23:16 · 193 阅读 · 0 评论 -
Educational Codeforces Round 73 (Rated for Div. 2)
A:#include <bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/hash_policy.hpp>using namespace std;using namespace __gnu_pbds;typedef long long LL;typed...原创 2019-09-29 00:25:26 · 173 阅读 · 0 评论 -
Codeforces Round #589 (Div. 2)
A:#include <bits/stdc++.h>using namespace std;int cnt[20];int main(){ int l,r; scanf("%d%d",&l,&r); for(int i=l; i<=r; i++){ memset(cnt,0,sizeof(cnt)); ...原创 2019-09-30 09:42:47 · 175 阅读 · 0 评论 -
Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)----C
这个。。。玄学,先留个坑,做法就是按照sqrt(n)分块,然后块内有序,有点像分块算法。具体的原理先留个坑。代码如下#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;int a[maxn];int main(){ int n; cin >...原创 2018-08-11 20:27:24 · 235 阅读 · 0 评论 -
codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)---B
满足交换了有变化的情况有s[i] = 0 t[i] = 0 和 s[i] = 1 t[i] = 0 的情况,那么我们先统计s串里面有多少个1和0,因为第一种和所有的1交换都可以,第二种和所有的0交换都可以改变xor之后的结果。 那么对每一个第一种情况,答案加上1的个数,第二种情况答案加上0的个数,但是因为满足上面两种情况的位置的0和1可以相互交换,因此存在一些重...原创 2018-08-11 20:20:51 · 191 阅读 · 0 评论 -
Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)---A
按结构体把每个人的成绩和id记录一下,然后写好cmp函数就行。代码如下#include <bits/stdc++.h>using namespace std;struct node { int id,s;}p[10000];int cmp(node a,node b){ return a.s == b.s ? a.id < b...原创 2018-08-11 20:12:35 · 191 阅读 · 0 评论 -
Codeforces Round #499 (Div. 2) ---- B Planning The Expedition
神奇的一题,没考虑复杂度就去dfs了,然后t了,才发现没有那么复杂。其实不用考虑分的方法,粮食的总量是固定的,假设存在一个答案k,每一种粮食分成k份,第i份粮食完最少的一份就是 a[i] / k如果所有粮食最少的份加起来比总人数大,说明这些粮食存在一种分法可以让n个人坚持k天,同时因为天数越多,消耗的粮食的量越大,所以可以二分搜索答案,因为数据不大,其实暴力也可以,如果是二分搜索...原创 2018-07-28 15:20:20 · 259 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2) ----D Bishwock
题目大致意思是有一个L形的棋子,可以有四种摆放方式,在一个2Xlength的棋盘上有些地方不能摆放棋子,有些地方可以,问最多可以摆多少个这样的L形棋子。通过画图我们可以知道,一个2x2的方形棋盘上,只要有3个可以摆放的位置,那么就可以放下一个L形棋子,而两个L形棋子可能拼在一个占三列,我们先选取状态 dp[i] 表示第 i 列的时候棋盘上最多可以摆放的个数,那么可以建立状态转移方程 ...原创 2018-07-14 10:38:08 · 230 阅读 · 0 评论 -
Codeforces Round #497 (Div. 2)----B Turn the Rectangles
有n个矩形,每一个可以旋转或者不旋转,那么经过一些调整能不能让这些矩形的长组成的序列没有递增子序列。遍历除最开头的所有的矩形,首先用一个 k 记录下第一个矩形的长的最大值,判断之后的矩形的长的最小值是否大于当前前一个的 k值,如果大于说明不满足条件,NO,如果小于,则记录下当前矩形的长最大的那个满足小于k的值,重复以上操作。如果都满足,那么输出YES#include <bits/stdc++...原创 2018-07-14 10:05:41 · 209 阅读 · 0 评论 -
Codeforces Round #497 (Div. 2)----A Romaji
每一个原音后面都要有一个辅音,那么便利一边字符串,每个检查一遍,如果不是原音,那么就检查下一位是不是原音,或者当前位是不是n即可,代码如下#include <bits/stdc++.h>using namespace std;char line[10000];int check(char s){ if ('A' <= s && s <=...原创 2018-07-14 09:58:31 · 382 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2)----C
有一堆糖,两个人,第一个人每天吃10%,第二个人每天吃k个,问k最小为多少的时候,可以让第一个人吃到超过半数的糖枚举k显然是不现实的,可以知道k越大,第二个人吃到的糖越多,满足二分查找的条件,因此对k做二分查找,对于每一个二分mid去计算当前第二个人吃到的糖的个数,如果超过半数,当前mid以及mid右侧所有的数都不合法,若小于半数反之即可。最后输出二分的结果即可,记得long long#inclu...原创 2018-07-07 14:28:39 · 193 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2)---B
可以改变把一串数字中的某个数变成5,直到平均数四舍五入达到了5贪心的想法,最先改变最小的数字,平均值上升的越快,所以先排序,挨个修改算平均值,O(nlog(n)) 解决#include <bits/stdc++.h>using namespace std;int a[20000];int main(){ int n; cin >> n; dou...原创 2018-07-07 13:50:41 · 191 阅读 · 0 评论 -
Codeforces Round #491 (Div. 2)----A
大意是,有两个地方A,B 有一部分人去A,一部分去B,一部分两个都去,一部分两个都没去,求两个都没去的人数。注意,c可以比a,b大,所以,多一条判断即可#include <bits/stdc++.h>using namespace std;int main(){ int a,b,c,n; cin >> a >> b >> c &g...原创 2018-07-07 13:41:57 · 155 阅读 · 0 评论 -
Codeforces Round #494 (Div. 3) ----B
输出一串01串,其中有x个位置满足 Si != Si+1我们先输出x/2个01或者10串,01还是10串,取决于0多还是1多,之后输出剩下的串,判读x的奇偶性,奇数的话,就先输出剩下的多的那个数字,然后输出少的,偶数相反#include <bits/stdc++.h>using namespace std;int main(){ int a,b,x,p,q; cin...原创 2018-07-07 13:26:59 · 299 阅读 · 0 评论 -
Codeforces Round #494 (Div. 3) ----A
相同的硬币不能装在同一个口袋,那么能用多少个口袋装,由出现次数最多的硬币决定,那么就是找输入的数重复次数最多的数#include <bits/stdc++.h>using namespace std;int a[105];int main(){ int n,num,k = 0; cin >> n; for (int i=0; i<n; i...原创 2018-07-07 12:41:11 · 150 阅读 · 0 评论 -
Codeforces Round #499 (Div. 2) ---- C Fly
这题可以知道 ,如果有答案,那么一定存在一个答案,使得最后剩下的油为0。那么倒推法可以知道设最后一次用掉的油设为t1,那么用掉的油为 t1 = ( m + t1) / b[i]; 那么可以解出答案t,同理,倒数第二次的油为t2 + t1 = (m + t2 + t1) / a[i]; 那么倒推到最后 ,就是答案代码如下。#include <bits/stdc...原创 2018-07-28 15:27:27 · 261 阅读 · 0 评论 -
Codeforces Round #499 (Div. 2) ---- E Border
D题确实没看懂,跑来做了E。题目中给了我们一些数字,我们可以拿这些数字,每个不定量。拿到的数转成k进制的最后一位不同的个数有多少。我们假设每个数字拿了xi个,那么总和就是 ( a1 x1 + a2 x2 +a3 x3 + a4 x4 + a5 x5 + ... + an xn ) % k = ...原创 2018-07-28 15:36:19 · 233 阅读 · 0 评论 -
Codeforces Round #499 (Div. 2) ---- A Stages
这题一开始没有很理解题意,结果瞎写过的,之后fst了。。。给我们一个串,去拿一些字母,字典序大于这个字母的第一个不能要,小于这个字母的不能要,求拿到最小的价值根据贪心的思想,我们肯定优先拿最小的字母,所以对这个字符串排个序,从最小的开始拿就好fst的原因就是计数的cnt写出了问题,在test24的位置wa了,以后注意下极端情况。代码如下#include <bi...原创 2018-07-28 11:39:30 · 191 阅读 · 0 评论 -
Codeforces Round #493 (Div. 2) ---- B Cutting
这题问我们有没有这样的一种切割满足所有的分割段都是奇偶数个数相等,然后切割的个数最大不能超过我们给的B个币。 因为每一段都要满足奇数和偶数,那么我们从开始的每一个点遍历,统计所有奇数的个数和偶数的个数,每当两个个数相同的地方,表示这个地方可以作一次切割,那么如果遍历完了 ,没有做切割,或者是最后的奇偶数个数不同,代表没有合法的分割。 而如果有合法的分割的话,那么我们就可以有,所...原创 2018-07-16 10:03:47 · 202 阅读 · 0 评论 -
Codeforces Round #493 (Div. 2) ---- A Balloons
给了我们一些包裹,每个包裹里有一些气球,怎么拿可以满足题目中给我们的条件。我们直接枚举第一个人拿了多少个,然后总个数减去第一个人拿掉的就是剩下的个数。注意第一个人不能把所有的气球都全部拿掉。代码如下#include <bits/stdc++.h>using namespace std;const int maxn = 10000;int a[maxn],sum[maxn];in...原创 2018-07-16 09:53:34 · 330 阅读 · 0 评论 -
Educational Codeforces Round 47 (Rated for Div. 2) D ---- Relatively Prime Graph
暴力出奇迹,暴力枚举所有的组合如果满足了n个就ok,判断图是否可以联通,边数够不够m个,判断是否有答案。#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;int gcd(int n,int m) {return m == 0 ? n : gcd(m,n%m);}struct node{ i...原创 2018-07-15 11:14:37 · 565 阅读 · 0 评论 -
Educational Codeforces Round 47 (Rated for Div. 2) ---- C Annoying Present
乍一看是个线段树。吓得赶紧搬出了线段树的板子,然而读题发现并不是区间修改。。。给我们一个全是0的数组,可以选取某一个位置 p,对i位置的元素加上 x + d * | p - i | ;最后要求最小的平均数。式子的推导和方法的证明,手写了。有不足的还请指教。代码如下#include <bits/stdc++.h>using namespace std;typedef long lon...原创 2018-07-15 01:34:02 · 326 阅读 · 0 评论