
--------------杂题------------
Lynstery
一只蒟蒻
展开
-
[估算] 1011: [HNOI2008]遥远的行星
题意直线上N颗行星,X=i处有行星i。行星J受到行星I的作用力,当且仅当i<=A*J.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力,只要结果的相对误差不超过5%即可。 n<=100000题解神奇的题目。如果要算精确值好像只能O(n),但该题不要求输出精确的答案,只要用好一点的方法估算即可。第一原创 2017-02-20 22:27:03 · 632 阅读 · 0 评论 -
[杂题] Codeforces #598B. Queries on a String
简单题。直接考虑原来的某个位置的元素最后到了哪里….O(nm)O(nm)#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10005,maxm=305;int n,m,L[maxm],R[maxm],rd[maxm];char s[maxn],res[maxn];原创 2017-11-08 20:36:36 · 374 阅读 · 0 评论 -
[杂题 单调性] Codeforces #121D. Lucky Segments
算是蛮好的题。 首先 Lucky numberLucky\ number 可以全部预处理出来,大概 10510^5 的规模。 答案取的数字一定是个连续的区间,考虑我们其枚举右端点,左端点是有决策单调性的。就想到可以 22-pointerpointer 搞一下。 剩下的问题就是如何快速判断一个区间是否合法了。 显然对于一个区间,肯定只进行左移或右移。所以可以分开算。设 LiL_i 表示左端点小原创 2017-10-23 19:56:09 · 331 阅读 · 0 评论 -
[杂题 计数] UOJ#209【UER #6】寻找罪犯
注意到,若 x<yx<y ,只可能是限制 sufsumy=xsufsum_{y}=x,若 x>yx>y, 只可能是限制 presumx=ypresum_x=y,只有x=yx=y 的时候有两种可能:sufsumx=xsufsum_{x}=x 或 presumx=xpresum_{x}=x。 注意到最后一种限制很特殊,只需要满足最大的,其他的都满足了。 所以需要讨论的限制只有一个,这样就简单了。原创 2017-10-16 10:16:55 · 393 阅读 · 0 评论 -
[杂题 异或 带权并查集] BZOJ2303: [Apio2011]方格染色
不太容易想到。首先要把限制看成异或,即每个点都要满足 ai,j xor ai,j−1 xor ai−1,j xor ai−1,j−1=1a_{i,j}\text{ xor }a_{i,j-1}\text{ xor }a_{i-1,j}\text{ xor }a_{i-1,j-1}=1 这些限制太复杂了,怎么进行转化呢? 注意到,如果我们已经确定的第一行和第一列的所有元素,则其他也确定了。所以原创 2017-10-31 14:16:39 · 436 阅读 · 0 评论 -
[组合] Codeforces #571A. Lengthening Sticks
一开始正着做很复杂,然后发现补集转化一下就很方便了,随便搞一下…#include<cstdio>#include<algorithm>using namespace std;const int maxn=100005;typedef long long LL;int a,b,c,L,d;LL ans;LL get(int a,int b,int c){ int x=min(L+原创 2017-10-24 20:54:28 · 466 阅读 · 0 评论 -
[杂题] Codeforces #577B. Modulo Sum
简单题。 a1,a1+a2,a1+a2+a3,a1+a2+a3+a4...a_1,\quad a_1+a_2,\quad a_1+a_2+a_3,\quad a_1+a_2+a_3+a_4... 抽屉原理,这些数模m一定会有相等的或为 00 的。容易想到,当 n≥mn \ge m 时是一定有解的。 所以直接 O(m2)O(m^2) 搞搞就好了。#include<cstdio>#include原创 2017-10-25 11:51:22 · 411 阅读 · 0 评论 -
[杂题] HDU5288: OO’s Sequence
显然是考虑一个数的贡献。我们相当于要对于每个数 aia_i,找到最大的 LL 满足 L≤i, aL|aiL \le i,\ a_L|a_i,最小的 RR 满足 aR|aia_R|a_i。 注意到这个想借助调和级数搞的话,复杂度是不太对的,因为 aa 中的数可以有重复,比如说一堆 11 。 其实暴力搞就好了,直接扫两趟,对于每个 aia_i 直接枚因子… 复杂度 O(nV−−√)O(n\sqrt原创 2017-11-02 16:12:46 · 288 阅读 · 0 评论 -
[冒泡 反序表] Codeforces #876D. Sorting the Coins
冒泡需要的趟数 == 反序表最大值。 这题只有01两种数字,所以每次求最后的0前面有几个1就好了。 具体实现倒着搞比较好。#include<cstdio>#include<algorithm>using namespace std;const int maxn=300005;int n,bit[maxn],_max,a[maxn],ans[maxn];void Updata(int x原创 2017-10-17 09:52:01 · 417 阅读 · 0 评论 -
[杂题 位运算] Codeforces #876F. High Cry
挺简单的题。这种所有区间中什么与最值有关的东西,一般考虑分治,或者求每个数的控制区间。 这题分治感觉不太好搞。就考虑后者,我们补集转化一下,考虑对于每个数,作为最大值,向两边最远扩展到哪里。显然直接每位独立考虑 O(nlogn)O(n \log n) 就能求出了。 需要注意的是,一个区间的最大值可能多次出现,为了避免重复,我们规定越在左边越大就好了。#include<cstdio>#inclu原创 2017-10-17 11:47:52 · 327 阅读 · 0 评论 -
[杂题] Codeforces #632D Longest Subsequence
值的范围是10610^6 ,所以可以想到直接枚举公倍数。然后就是要统计一个数的因数出现了几个。这个直接 O(nlogn)O(n\log n) 。 实际上这题有一个条件弱化的思想,不需要一定是最小公倍数,大的公倍数满足,对应的最小公倍数也满足。#include<cstdio>#include<algorithm>using namespace std;const int maxn=100000原创 2017-10-26 15:20:15 · 282 阅读 · 0 评论 -
[杂题 图论] Codeforces #437C.The Child and Toy
简单题。考虑一条边 (x,y)(x,y) 对答案的贡献,可能是 axa_x 或 aya_y ,取决于哪个点先被删。 那显然我们从大到小删就可以做到每条边的贡献是 min{ax,ay}min\{a_x,a_y\},是最优的。#include<cstdio>#include<algorithm>using namespace std;const int maxn=1005;typedef lo原创 2017-11-06 14:49:57 · 411 阅读 · 0 评论 -
[杂题 计数 图论] Codeforces 51E. Pentagon
挺烦的题…..很容易wa… 总之就是求出 Bi,jB_{i,j} 表示 ii 到 jj ,走两步的方案,Ci,jC_{i,j} 表示走三步。 然后 ∑Bi,j∗Ci,j\sum B_{i,j}*C_{i,j}。然后会有不合法的和重复的… 不合法的大概是 一个三角形多出一个脚…或者就是一个三角形… 在纸上大力分类讨论一下,把它们都扣去就好了。 参考了网上dalao的实现。#include<cs原创 2017-11-08 20:12:50 · 468 阅读 · 0 评论 -
[杂题] Codeforces #121C. Lucky Permutation
这题很 cfcf 。虽然 nn 很大,但由于 KK 只有 1e91e9,所以数列前面大部分数字是在原位的。13!=622702080013!=6227020800,只有后面不到 1414 位会变化,后面暴力就好了。 前面的 11到 n−13n-13,数位 DPDP 求答案。#include<cstdio>#include<algorithm>using namespace std;const原创 2017-10-23 17:00:20 · 426 阅读 · 0 评论 -
[杂题 离散 扫描线] BZOJ1227: [SDOI2009]虔诚的墓主人
不难的题。 考虑一个空的点的贡献是一个组合数的形式,即答案为 ∑(leftK)(rightK)(upK)(downK) \sum {left \choose K }{right \choose K }{up \choose K }{down \choose K } 怎么求呢? 显然先离散,只需考虑离散后的网格上的点。 对于每一行,可以考虑扫过取求两个实点中间空点的贡献,每一段的贡献是(le原创 2017-10-30 18:43:59 · 335 阅读 · 0 评论 -
计蒜客 2017 NOIP 提高组模拟赛(一)题解
最近做了一下这个,所以来写份题解。day1T1 以前做过差不多的题,就是把矩阵转45度,然后就可以二维前缀和了。T2 一条边对答案的贡献即经过它的路径的总条数,就等于删去这条边后得到的两个子树的点数乘积。 每次直接 O(1)O(1) 改一下就好了。T3 直接 DPDP, f[i][j][k]f[i][j][k] 表示走到位置 (i,j)(i,j) ,已经用了 kk 次技能的受伤最小值。原创 2017-08-09 23:34:39 · 1819 阅读 · 0 评论 -
[匹配+拓扑] LibreOJ #521. 「LibreOJ β Round #3」绯色 IOI(抵达)
题意戳这里题解这题一开始感觉无从下手,所以我们要尝试得到一些结论。 自己画一画可以发现,一定是两两互为对方的庇护所。这样才有可能保证任意两个不同的城市庇护所不同。否则由于原图没有环,到后面必定会撞上。 树上的完美匹配要么无解,要么就只有唯一解。直接 dfsdfs 一趟就能得到匹配关系了。 庇护所都确定了就很简单了,就剩下一些危险度大小关系的限制。直接根据限制建拓扑图,然后用堆搞一搞就能满足字典原创 2017-08-10 21:48:11 · 776 阅读 · 0 评论 -
[数学杂题 随机]【NOIP2014】解方程
这是一道不是很远古的 noipnoip 题。 由于很久之前看过,就只能写一写可能不太有理有据的思考过程了: 这样一个问题,数据范围较大,原创 2017-10-17 19:56:08 · 301 阅读 · 0 评论 -
[杂题 单调性]【NOIP2016】蚯蚓
这是一道去年的联赛题,由于联赛快到了,这里就写一写有理有据的思考过程: 首先这个全部长度加qq,我们很容易想到开一个全局变量记增量。即如果我们只关注相对大小的话,相当于每次只是把刚且出的两条长度减 qq,其他不变。 这时候要谨慎走入高级数据结构的不归路,联赛一般是不会这样的。 所以我们就想这题有什么特点。可以发现,切出来的蚯蚓长度都比原来小,所以每次取出的最大值,一定是递减的。 这个单调性很原创 2017-10-18 08:59:24 · 377 阅读 · 1 评论 -
[杂题 组合] 51Nod1934 受限制的排列
不难的题。首先考虑 11 的区间一定是 [1,n][1,n]。其他数的区间不可能跨过 11 ,所以数列就分成了左右独立两边,继续找两边最小的,分下去。 显然就是一个笛卡尔树的构建过程。 设 f(L,R)f(L,R) 表示这个区间的方案数,x表示控制区间为 [L,R][L,R] 的数的位置,则: f(L,R)=f(L,x−1)∗f(x+1,R)∗(R−LR−x) f(L,R)=f(L,x-1)*原创 2017-10-18 14:50:04 · 489 阅读 · 0 评论 -
[卷积 组合 线性筛] 51nod1769 Clarke and math2
题意就是已知 ff 求 g=f∗1∗1∗....∗1g=f*1*1*....*1,其中 ∗* 是数论卷积,有 KK 个 11。 只需求 1K1^K 。这个 KK 是个高精数,硬算肯定不行。 考虑 (1K)(n)=∑i0|i1|i2|i3...ik|n1(1^K)(n)=\sum_{i_0|i_1|i_2|i_3...i_k|n} 1 应该可以排列组合搞。 因为 1K1^K 是积性函数,想到尝试原创 2017-10-18 20:09:16 · 489 阅读 · 0 评论 -
[杂题] Codeforces #484B. Maximum Value
这种 cfcf 的小题很 zicizici 啊。题不难但是感觉很好。 ai mod aj=d, aj∗k=ai−da_i \text{ mod } a_j=d,\ a_j*k=a_i-d 值域不大,就直接在值域上做。可以想到,先枚举 aja_j 再枚举 kk,预处理 nxtinxt_i 表示 从 ii 开始向左找第一个出现的数字。就好了。 O(nlogn)O(n \log n) 。注意范围要开原创 2017-10-21 07:05:59 · 338 阅读 · 0 评论 -
[杂题 组合] Codeforces #40E. Number Table
题很关键的一点是注意到 kk 严格小于 max(n,m)max(n,m),所有一行或一列是完全空的。 然后就很简单了,只需考虑一维的限制。 瞎搞就好了。#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1005;int n,m,K,cnt[maxn],v[原创 2017-11-07 16:31:54 · 475 阅读 · 0 评论 -
[杂题 树状数组] 51Nod1681 公共祖先
不错的题,思路很套路。考虑求的答案是 ∑i,j∑k[k在两棵树中都是i,j的祖先]\sum_{i,j} \sum_k [k在两棵树中都是i,j的祖先] 改变枚举顺序,设 Son1(x)Son_1(x) 表示第一棵树中以x为根的子树的点集,答案就变成: ∑k(|Son1(k)∩Son2(k)|2)\sum_k { | Son_1(k) \cap Son_2(k) |\choose 2} 这个原创 2017-10-30 07:47:34 · 379 阅读 · 0 评论 -
[杂题 暴力 ST表] 51Nod1487 占领资源
这种题看似很暴力,但也不能太暴力,需要一定的思考。 我们先枚举一个塔,再考虑下一个塔,注意到第2个塔与第一个塔有重叠的只有最多 K2K^2 个,即暴力枚举交在哪里,直接就得到了。 对于这些有重叠的暴力算答案,剩下的都和第一个塔没有重叠,就挑一个最大值即可。 除去 K2K^2 个元素的最大值,不要用什么线段树单点修改,直接 STST 表预处理,跳过 除掉的元素,一段一段询问最大值即可。#incl原创 2017-10-21 21:43:08 · 338 阅读 · 0 评论 -
[杂题 思维] 51nod1448 二染色问题
好题,思路很巧妙。想到逆着搞就简单了。 考虑最后覆盖的一次,一定形成一个 K∗KK*K 的同色子矩阵,我们把它拿掉,则这些位置的露出的颜色是任意的。我们不断重复找可能的同色子矩阵,一层层剥掉。 最后判断是否存在一定是黑色的点即可。#include<cstdio>#include<algorithm>using namespace std;const int maxn=35;int _te原创 2017-10-21 22:42:39 · 403 阅读 · 0 评论 -
[杂题 图论 构造] Codeforces #639B. Bear and Forgotten Tree 3
瞎搞题。 从 11 往下构造出两条长度分别为 d, h−dd,\ h-d 的链,然后剩下的点全部堆到某个点下面,注意当 d=hd=h 时特殊考虑一下。#include<cstdio>#include<algorithm>using namespace std;int n,H,D;int main(){ //freopen("cf639B.in","r",stdin); //原创 2017-11-06 16:01:38 · 366 阅读 · 0 评论