随笔分类 - 其他
摘要:"嘟嘟嘟" 在GX大佬cyh的提议下,我就开了这道题。 看到位运算,就想到每一位单独考虑。 那么对于$AND$操作,我们只要找全是1的子矩阵个数。 对于$OR$操作,用子矩阵总数 全0子矩阵个数即可。 这样就有一个$O(n ^ 4 logN)$($N$是值域)的做法了,可以拿到50分。 然后我就没想
阅读全文
摘要:"嘟嘟嘟" 看完题后突然想起jf巨佬的话:“看到曼哈顿距离就想转切比雪夫距离。” 于是我就转换了一下。 然后问题变成了求 $$max_{i, j \in n} \{ max \{ |x_i x_j|, |y_i y_j| \} \}$$ 令差最大,只要分别找出$x, y$的最小值和最大值即可。 $O
阅读全文
摘要:"嘟嘟嘟" 是个狠题…… 首先,差分得到数组$d$。 这样每一次的操作相当于$d_i++$和$d_j $。然后问最少的操作次数是数组$d$全是$0$. 很显然每一次可以往一个负数上$++$,往一个正数上$ $。令$ans1$为负数和,$ans2$为正数和,则把所有的负数或正数变成$0$需要操作$mi
阅读全文
摘要:嘟嘟嘟 只要将每一种字母放一块输出就行了。 证明1:比如 1 2 3 4 5 6,那么这个序列对答案的贡献分别是1和5,2和4 ,3和6……如果重新排列成x x x x o o,会发现对 x x o x x o 答案的贡献不变,所以得证。 证明2:字母ai有xi个,那么对答案的最大贡献为xi * (
阅读全文
摘要:嘟嘟嘟 这道题我觉得跟最大子矩阵那道题非常像,都是O(n4)二维前缀和暴力很好想,O(n3)正解需要点转化。 O(n4)暴力就不说啦,二维前缀和,枚举所有矩形,应该能得55分。 O(n3)需要用到降维的思想。先考虑这么个问题:对于一个序列,求区间和是k的倍数的区间个数。有点想法的暴力就是前缀和预处理
阅读全文
摘要:嘟嘟嘟 刚开始我以为如果这头牛撞开一个干草堆的话,获得的冲刺距离只有新增的部分,但实际上是加上原来的部分的。 暴力很好写,区间排完序后一次判断每一个区间是否能逃脱,复杂度O(n2)。 优化想起来也不难:如果一个区间 i 能逃脱,区间 j 能到达 i,则 j 也能逃脱。所以对于每个区间开一个标记数组,
阅读全文
摘要:嘟嘟嘟 规定第 i 个人只给第 i - 1个人糖果,为xi个,因为若xi < 0,说明第 i - 1个人给第 i 个人|xi|个。那么ans = |x1| + |x2| + |x3| + …… +|xn| 那么就可以列出:a1 - x1 + x2 = ave, a2 - x2 + x3 = ave,
阅读全文
摘要:嘟嘟嘟 这道题就是区间加一个等差数列,然后最后求每一个数的值。 O(n)做法:二阶差分。 其实就是差分两遍。举个例子 0 0 0 0 0 0 0,变成了 0 2 4 6 8 0 0。第一遍差分:0 2 2 2 2 -8 0,然后在这个差分数组上在进行差分,得到 0 2 0 0 0 10 8,完事。
阅读全文
摘要:嘟嘟嘟 首先可以想到,最小距离一定是a中第 i 大的和b中第 i 大的在同一行。 然后先把a,b分别离散化,然后开一个标记数组,map[i]记录a中第 i 小的数在哪一个位置出现,然后对b数组处理一遍。 题中说交换次数,自然想到逆序对,于是我们对新的b数组求一遍逆序对就行了。 1 #include<
阅读全文
摘要:虽然平时用Dev,但考试的时候linux下没有Dev,只能用emacs了…… 这里记录一些我常用的指令和配置文件中的代码行。 指令: 1.c-x 1:只留一个窗口 2.c-x 2:分成上下两个窗口 3.c-x 3:分成左右两个窗口 4.c-x + h:全选 5.c-x + f:打开文件 6.m-x
阅读全文
摘要:10.7更新:见最下面 离NOIP2018没剩多长时间了,我突然发现我连对拍还不会,于是赶紧到网上找资料,找了半天发现了一个特别妙的程序,用c++写的! 不过先讲讲随机数据生成吧。 很简单,就是写一个程序模拟输入数据,然后利用rand()编写随机数。 在头文件cstdlib中,有rand(), sr
阅读全文
摘要:嘟嘟嘟 这题有人说部分分O(n3)暴力,然而我暴力都没写过,调了半天也没用……还是看题解吧 首先,咱把A * ( h – minH ) + B * ( s – minS ) <= C 变个型,得到 A * h + B * s - C <= A * minH + B * minS. 令 sum = A
阅读全文
摘要:嘟嘟嘟 考虑如果第一个格子是否是雷确定了,那么a[1]的合法性就确定了(a[]代表输入的一串数)。这样对于a[2],唯一不确定的格子就是b[3](b[i]代表i这个格子是否有雷),而b[3]又可以根据a[2]而定,所以说只要第一个格子确定,整个序列就确定了。因为一个格子只有有雷和没有雷的情况,所以答
阅读全文
摘要:嘟嘟嘟 此题看起来不难。 首先我想到的是用map,然而只能的70分,剩下的超时了。然后我就想到了用去重函数unique,这样就过了。 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #
阅读全文
摘要:嘟嘟嘟 这题学过多重背包二进制优化都知道用二进制拆分就行,然而题中说两数不能相同,比如9,拆分后就是1 2 2 4,不符合,所以遇到a[i] == a[i + 1] 的情况,就a[i]--,a[i + 1]++就行。 1 #include<cstdio> 2 #include<iostream> 3
阅读全文
摘要:嘟嘟嘟 此题我想了半个点,得出一个重要结论:我除了暴力以外啥也想不出来。 然后看了一下题解,彻底懵了…… 对于每一个数 j,令x = j * a,因为题中说了一句“只要结果的相对误差不超过5%即可”,所以用分块解决这[1, x]。正好一块的部分[L, R]就都除以 j - (L +R) / 2……没
阅读全文
摘要:嘟嘟嘟 很容易想到,相对于直线 l1,斜率较大的直线 l2 一定在这两条直线的交点的右侧将l1 覆盖掉,而l2在交点的左侧部分会被l1覆盖。这样的话,对于三条直线l1, l2, l3 满足k1 < k2 < k3, 设l1和l2的交点为A, l1和l3的交点为B, l2和l3的交点为 C,如果B在A
阅读全文
摘要:题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。例如:123可表示为 1\times 10^2+2\times 10^1+3\times 10^01×102+2×101+3×100 这样的形式。 与之相似的,
阅读全文
摘要:题目描述:给出一个长度为n 的序列A1,A2,...,An,求最大连续和。换句话说,要求找到1<=i<=j<=n,使得Ai+Ai+1+...+Aj 尽量大。 输入格式:第一行输入n(1<=n<=50000)。接下来1 行输入序列的n 个元素,第i+1 行为Ai(|Ai|<=10000)。 输出格式:
阅读全文
摘要:将n 进制数x,转换为m 进制数y输出.(n,m<=20) 输入格式 x<n>m 输出格式 x<n>=y<m> 样例输入 48<10>8 样例输出 48<10>=60<8> 没啥好讲的,先转化成10进制,再转化成其他进制。
阅读全文

浙公网安备 33010602011771号