Codeforces
文章平均质量分 72
Lazines_by
好吧,我要工作了
展开
-
Codeforces785C (二分)
题意:给出一个n,m,最初一个容器里面的数量是n,然后每天取1,2,3,4……数量的物品,每次取完之后就向里面加入m个物品,问最终取完了容器里面的时间。思路:我们知道,当n 当n > m的时候,我们可以把取的东西分为两个部分,第一部分是小于m的天数,因为这个时候取得物品数量小于m,所以容器里面的数量总是保持在n. 在天数大于m的时候,我们发原创 2017-08-07 17:18:12 · 322 阅读 · 0 评论 -
codeforces846C(前缀和)
题意:给出一个数列,下标为0 - n - 1。然后求x,y,z,使得sum[0,x) - sum[x,y) + sum[y,z) - sum[z,n)的值最大。思路:相当于数列的所有的和sum - 2 * ( sum[x,y) + sum[z,n) )最大,所以要使得sum[x,y) + sum[z,n)最小。这样的话先预处理一下从后往前的最小,即处理出对于i来说sum[z,n)最原创 2017-09-14 11:06:32 · 376 阅读 · 0 评论 -
Codeforces846D(二分+树状数组)
题意:每次对矩阵进行更新,有一个时刻。然后问什么时候使得矩阵中有k * k的矩阵被更新了。思路:二分时间,然后判断每一个时间是否复合,注意这里的时间不一定是连续的,所以需要离散化。每次判断的时候需要对进行重新操作,判断是否符合,用到了二维树状数组。#include#include#include#include#include#includeusing namespa原创 2017-09-14 10:53:53 · 359 阅读 · 0 评论 -
Codeforces830C(思维)
题意:给出一排数列,然后要求出一个d,使得将数列中的数变成d的整数倍之后与原来的相差之和要小于k,求d的最大值。思路:相当于将数列中的数变成整数倍之后的数要小于sum = k + sigma(a[i])。因为是整数倍,所以不考虑剩余,直接将d枚举成sum的因子,然后看是否符合。#includeusing namespace std;const int maxn = 1000 +原创 2017-08-05 09:42:56 · 250 阅读 · 0 评论 -
poj 2454 随机
题意:有三个区,要保证至少两个区的投票在k * 500之上。思路;先排个序,然后将前k * 2大的数进行分成两个区,如果不符合的话就从两个区中得到这个数进行交换。PS:随机是个好东西#include#include#includeusing namespace std;typedef long long ll;const int maxn = 50 + 10;原创 2017-08-04 21:09:20 · 310 阅读 · 0 评论 -
Codeforces785D (组合数的逆元)
题意:给出一些括号的字符串,然后求删除里面的一些字符使得字符变成RSBS的类型,RSBS的类型为(),(()),((())).思路:有一个公式: 我们枚举每一个左括号用到它的情况就是C(x,x + y - 1),x为它的左边的左括号个数,y为它的右边的右括号个数。PS:这次学会了阶乘的逆元打表方式,#include原创 2017-08-04 20:20:31 · 300 阅读 · 0 评论 -
Code forces798D(随机排列函数random_shuffle的应用)
利用random_shuffle进行答案的枚举,找到符合的就#includetypedef long long ll;using namespace std;const int maxn = 1e5 + 10;int a[maxn];int b[maxn];int c[maxn];int main(){ int n; while( ~ scanf("%原创 2017-08-04 16:04:16 · 263 阅读 · 0 评论 -
Codeforces 96E(数位dp)
题意:找出l,r之间的符合至少有幸运数字相差不超过k的数的个数。思路:明显的数位dp.思路很简单。但是一直WA在第16个测试样例,因为pre刚开始设置为k + len,想着这样能保证第一个与他相减能使得不低于k,然而pre作为dp数组里的记忆话的元素,并不能频繁地改变,长记性了。#includeusing namespace std;typedef long long ll;原创 2017-08-17 09:56:56 · 340 阅读 · 0 评论 -
codeforces55D(离散化数位dp)
题意:问[L,R]10^18区间里面有多少个beautiful的数,beautiful数是每一位上的!0都被这个数整除。思路:一个数能被它的所有数位上数整除的话,那么它就能把它的数位上的数的lcm整除。数位上的数最多是1-9,lcm最大为5 * 7 * 8 * 9 = 2520;将前边的sum值保存一下前面的值,但是数会很大,dp数组存不下。我们要想好办法将这个数变小。因为lcm最原创 2017-08-02 21:50:37 · 475 阅读 · 0 评论 -
codeforces822D(思维)
思路:对于n个人进行平局分配次数最少就是每局的人最少即每次分组越多越好。打个表,就行。#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define fi first#define se second#define INF 0x3f3f3f3f原创 2017-08-02 17:44:38 · 244 阅读 · 0 评论 -
codeforse 466B
题意:给出一个值,和长宽,然后要把长 * 宽变得大于等于值,问变化后最小的值为多少,长和宽不能减小。思路:枚举一个数,然后另一个数就是和它相乘大于等于值,然后取最小就行。时间复杂度O(sqrt(n))#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator原创 2017-08-02 15:15:23 · 978 阅读 · 0 评论 -
codeforces 835C(二维前缀和)
题意:给出一些点的值,查询在一个时间点一段区间的值。点的值会随时间每次增加一,然后取(k + 1)的模。思路:以为k是PS:一个点不只是一个值,在这个地方被卡。二维前缀和的构造和维护可以复习一下。#includeusing namespace std;typedef pair P;const int maxn = 100000 + 10;typedef long lon原创 2017-08-02 15:10:53 · 632 阅读 · 0 评论 -
codeforces 833A
思路:看n *m是否是完全三次方的数以前不知道pow开方怎么消除误差,直接ceil()或者加个0.5在floor一下。#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define fi first#define se secon原创 2017-08-02 15:05:21 · 318 阅读 · 0 评论 -
Codeforces 842C(思维)
题意:一棵树,求出每一个点到1的路径上的最大gcd,可以使一个变成0;思路:保存一个数组为都取,然后每一个点维持一个vector数组,保存的是上一个的结果。#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#define se second#defin原创 2017-08-30 20:33:13 · 632 阅读 · 0 评论