思维
orzqqqqqqq
这个作者很懒,什么都没留下…
展开
-
2018 Multi-University Training Contest 1——1010.Turn Off The Light
规律:如果从1开始往右走的话,如果从(1~i)经过的零的个数和有奇数个零的话(那么i与下个数必定要有一个来回),可以手动模拟样例。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=1010000; const int mod = 1e9+7; int n,T; bool...原创 2018-07-24 22:25:01 · 1005 阅读 · 1 评论 -
牛客网暑期ACM多校训练营(第二场)G.transform
官方的题解: 因为我们要让货物移动总距离尽可能小,所以最后所使用的集装箱的初始位置在数轴上一定是一段区间。 如果固定了这个区间,那么最优方案就是把这些集装箱移动到这些集装箱的坐标中位数的位置。 答案满足可二分性,先二分答案。然后我们按照从左至右的顺序枚举区间的左端点,那么区间的右端点和 区间的中位数都是单调递增的,一遍枚举一遍维护即可。 复杂度O(n*log(sum(a[i]))) 一些细节:...原创 2018-07-21 22:34:13 · 300 阅读 · 0 评论 -
csu 2168: Fixed Point
题解:先把m次操作的置换给求出来,记住每个点在该置换中的位置,长度不同的置换最多有sqrt(n)个数,这里我自己只开了300个(够用)。然后对每个询问按%m分类,然后对每个%m类 求出每个点贡献,再统计答案。 #include"bits/stdc++.h" using namespace std; const int MX = 1e5+7; int n,m,q; int res[MX][300...原创 2018-09-15 10:34:09 · 192 阅读 · 0 评论 -
GYM100608 D. Decomposable Single Word Languages
全部为同一种字符则为NO 不全部为同一字符,则可以分两种情况:①开头字母自己指向自己进行循环,②结尾字母自己指向自己进行循环,中间的直接指向后面一个即可,然后交集便是输入的字符串。 #include<bits/stdc++.h> using namespace std; const int MX = 111; const int INF = 0x3f3f3f3f; char s[...原创 2018-11-09 19:34:29 · 194 阅读 · 0 评论 -
Gym100608 J. Jinxiety of a Polyomino
(因为是凸多边形)在点(U[i][j], L[i][j])——(i,j)子矩形中所有点到i,j这个点都只需要转一个弯。矩阵前缀和预处理。 #include <bits/stdc++.h> using namespace std; const int MX = 2007; int n,m,res; char s[MX][MX]; int L[MX][MX],U[MX][MX],sum...原创 2018-11-11 13:54:29 · 155 阅读 · 0 评论 -
2019牛客暑期多校训练营(第二场)J Subarray
题解: 先算出每一段可能往左往右扩展多少个负数,那么对于负数过于长的一段,它的中间的一部分就被扔掉了。由于每个正数段最多往左右各扩宽自身的长度。所以负数最多只有2e7个。 接下来可以用树状数组统计,但是这样会多一个log。因为每次询问相较于上次只移动了一个单位所以直接统计在上次询问的基础上更改就好。代码挺短的...... #include <bits/...原创 2019-07-21 12:37:56 · 132 阅读 · 0 评论 -
gym101964A Numbers
题解:搜索剪枝,特殊情况记忆化搜索,这题写了好久啊,例子:99999999999999999,这个跑出来答案有800000000。8亿,单纯的搜索肯定会t的,可以大概验证一下如果两个加数的长度不一样那么,方案数是很少的这种情况考虑搜索剪枝,而如果长度是一样的考虑记忆化搜索。那么如何剪枝呢?我们枚举一个加数(记为a)的位数最高位,那么同样知道这个加数的最低位。同理我会知道另外一个加数...原创 2019-09-19 23:55:07 · 289 阅读 · 1 评论