随笔分类 -  其他

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