- 博客(23)
- 收藏
- 关注
原创 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 193
原创 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 226
原创 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 208
原创 Codeforces Round #499 (Div. 2) ---- A Stages
这题一开始没有很理解题意,结果瞎写过的,之后fst了。。。给我们一个串,去拿一些字母,字典序大于这个字母的第一个不能要,小于这个字母的不能要,求拿到最小的价值根据贪心的思想,我们肯定优先拿最小的字母,所以对这个字符串排个序,从最小的开始拿就好fst的原因就是计数的cnt写出了问题,在test24的位置wa了,以后注意下极端情况。代码如下#include <bi...
2018-07-28 11:39:30 149
原创 acm暑期第一场比赛总结
打的时候心态真的很重要,特别是对于我这样的新手,比赛的时候,一个简单的二分,还有一个对于我稍复杂的模拟,写到心态爆炸,思路混乱,再加上赶着交题,连A题这样水爆了的题都wa了一次,还有英语的问题,习惯了挂翻译,读不懂题目意思,就开始动手写,这是不科学的。 场下补完了B,D题,D题dfs+剪枝,B就是wa爆了的模拟,明早补完 J 题,剩下的还没读题。 总...
2018-07-17 00:16:47 246
原创 Codeforces Round #493 (Div. 2) ---- C Convert to Ones
给我们一些01串,有两种操作,把一段字串反转,代价为x,或者把一段字串每个取反,代价为y我们发现,要把所有字符都变成 1,我们至少用一次取反操作,最多用n-1次取反操作(n代表全为0的块的个数)。我的思路取反不会去把1变成0,没啥意义,那么我们每用一次反转操作,就可以将两个全为0的块合并为1个。那么可以发现,假设操作1的次数为a,操作2的次数为b,那么答案就为 a * y + b * (x - ...
2018-07-16 10:19:21 206
原创 Codeforces Round #493 (Div. 2) ---- B Cutting
这题问我们有没有这样的一种切割满足所有的分割段都是奇偶数个数相等,然后切割的个数最大不能超过我们给的B个币。 因为每一段都要满足奇数和偶数,那么我们从开始的每一个点遍历,统计所有奇数的个数和偶数的个数,每当两个个数相同的地方,表示这个地方可以作一次切割,那么如果遍历完了 ,没有做切割,或者是最后的奇偶数个数不同,代表没有合法的分割。 而如果有合法的分割的话,那么我们就可以有,所...
2018-07-16 10:03:47 160
原创 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 288
原创 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 510
原创 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 280
原创 Educational Codeforces Round 47 (Rated for Div. 2) ---- B Minimum Ternary String
给我们一个含有0 ,1 , 2的字符串,01可以交换,12可以交换,02不可以交换,输出这些数组交换后的组成最小的数字。 显然越大的数位置越靠右边,这个数越小。那么如果从正面考虑,挨个交换,感觉非常的麻烦,这样wa了三次,考虑的情况每次都不够。 那么我们可以注意到,1在这个串内的位置可以任意移动,因为1总是可以和任何数交换,而2和0的二者相对的位置是固定的,无论怎么交换,原来在...
2018-07-15 01:06:10 240
原创 Educational Codeforces Round 47 (Rated for Div. 2) ---- A Game Shopping
这题,有n个物品,每个价值ci,m个硬币,每个面值ai,按顺序买每一件物品,硬币一定要从第一个开始花,最多买多少东西。遍历所有物品,一个指针指向第一个硬币,如果有价值高于当前指针指向的硬币的物品,指向硬币的指针++。最后的答案就是指针的位置。代码如下。#include <bits/stdc++.h>using namespace std;int c[10005],a[10005];...
2018-07-15 00:54:47 267
原创 Codeforces Round #497 (Div. 2) ---- C Reorder the Array
给我们一些数字,我们把这个数字重新排列,那么会有一些位置的数大于这个位置上原来的数字,寻找这样的位置最多有多少。有一种做法就是排序-贪心,最大的数优先放在比他小的最大的数字上这里有一种方法,统计最大的出现过的数的次数cnt,n - cnt即可。代码简单,第一种做法的代码,和第二种的证明,坑先留着一下吧。#include <bits/stdc++.h>using namespace s...
2018-07-14 17:15:47 139
原创 Codeforces Round #491 (Div. 2)----E Bus Number
菜,借鉴了别人的写法,原本以为是推理组合数公式,但是情况太复杂了,也不知道怎么枚举,可能是dfs用的不太熟练这题给我们一个数字,这个数字里面每一个出现了的数字至少选一个,至多选出现次数个,用这些数字去排列有多少种情况。带重复数字的排列数,全排列之后除以每一个数的重数的全排列即可。 那么这道题,我们可以暴力的dfs出所有数排列情况,因为算排列数和数字出现的先后没有关系,所以我们可以枚举...
2018-07-14 16:43:55 169
原创 Codeforces Round #491 (Div. 2) ----D Bishwock
题目大致意思是有一个L形的棋子,可以有四种摆放方式,在一个2Xlength的棋盘上有些地方不能摆放棋子,有些地方可以,问最多可以摆多少个这样的L形棋子。通过画图我们可以知道,一个2x2的方形棋盘上,只要有3个可以摆放的位置,那么就可以放下一个L形棋子,而两个L形棋子可能拼在一个占三列,我们先选取状态 dp[i] 表示第 i 列的时候棋盘上最多可以摆放的个数,那么可以建立状态转移方程 ...
2018-07-14 10:38:08 178
原创 Codeforces Round #497 (Div. 2)----B Turn the Rectangles
有n个矩形,每一个可以旋转或者不旋转,那么经过一些调整能不能让这些矩形的长组成的序列没有递增子序列。遍历除最开头的所有的矩形,首先用一个 k 记录下第一个矩形的长的最大值,判断之后的矩形的长的最小值是否大于当前前一个的 k值,如果大于说明不满足条件,NO,如果小于,则记录下当前矩形的长最大的那个满足小于k的值,重复以上操作。如果都满足,那么输出YES#include <bits/stdc++...
2018-07-14 10:05:41 165
原创 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 334
原创 hash排序----输出前m大的数
T最大100,n最大5e5,O(n)的方法才能勉强卡过去,因此,快速排序也不行,需要一种更快的非交换类排序方法,hash排序。因为数最大为5e5,我们用hash表来统计每个数出现的次数,将数字当成下标,那么从最大的数遍历到最小的数,就是从大到小的顺序。这种方法和数字的大小有关,本体中n有负数,处理过后n最大为1e6,所以时间复杂度内可以解决。代码部分#include <bits/stdc++...
2018-07-08 23:46:29 374
原创 Codeforces Round #491 (Div. 2)----C
有一堆糖,两个人,第一个人每天吃10%,第二个人每天吃k个,问k最小为多少的时候,可以让第一个人吃到超过半数的糖枚举k显然是不现实的,可以知道k越大,第二个人吃到的糖越多,满足二分查找的条件,因此对k做二分查找,对于每一个二分mid去计算当前第二个人吃到的糖的个数,如果超过半数,当前mid以及mid右侧所有的数都不合法,若小于半数反之即可。最后输出二分的结果即可,记得long long#inclu...
2018-07-07 14:28:39 167
原创 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 149
原创 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 126
原创 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 252
原创 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 120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人