我是靠谱客的博主 搞怪白昼,最近开发中收集的这篇文章主要介绍水题杂做(,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

平时闲的无聊写的或者口嗨的水题就不水博客了。


CF1545A AquaMoon and Strange Sort

题意

给出 n n n个数字的一个序列,每次可以交换相邻的两个数字,求是否能够将序列从小到大排序且每个数字被交换次数为偶数。
n ≤ 1 0 5 nleq 10^5 n105

解题思路

其实就是每个数字的奇偶位置不能变,按照奇偶位置排序然后判断是否有序即可


[USACO15OPEN]Palindromic Paths G

题意

n ∗ n n*n nn的字母矩阵,求有多少条从 ( 1 , 1 ) (1,1) (1,1)出发只向右和下走的路径满足经过的路径是一个回文串。
n ≤ 500 nleq 500 n500

解题思路

两头同时出发,设 f i , j , k f_{i,j,k} fi,j,k表示走了 i i i步,两头的横坐标分别是 j , k j,k j,k,这样可以压掉一维状态了,然后滚动卡长


P4873 [USACO14DEC]Cow Jog G

题意

n n n头牛,每头牛从 p i p_i pi出发,速度为 v i v_i vi,跑 T T T秒。
求最少多少个赛道可以使所有牛之间没有冲突。
1 ≤ n ≤ 1 0 5 1leq nleq 10^5 1n105

解题思路

两头牛有冲突当且仅当 a a a的起始位置小于等于 b b b,而 a a a的终止位置大于等于 b b b。因为起始位置单调,所以算出终止位置然后求最长不升子序列即可。


P3535 [POI2012]TOU-Tour de Byteotia

题意

给出 n n n个点 m m m条边的一张无向图,求至少删掉多少条边才能让编号不超过 k k k的点都不在任何一个环上。

解题思路

考虑一下如果一个点在环上,显然删掉关键点连着的边不会亏,所以肯定存在一种方案只删去连接关键点的边。
所以我们可以优先连接所有的非关键点的边,然后剩下的跑一个类似最小生成树的就好了。


P5505 [JSOI2011]分特产

题意

n n n个人, m m m种特产。第 i i i种特产有 a i a_i ai个 ,要求每个人都分到一个特产,求方案数。

1 ≤ n , m , a i ≤ 1000 1leq n,m,a_ileq 1000 1n,m,ai1000

解题思路

考虑二项式反演,这样就可以去掉每个人都分到的条件了。


CF1555D Say No to Palindromes

题意

给出一个串,每次询问一个区间表示将这个区间子串提出来之后至少要修改多少个字符才能使得没有长度大于 1 1 1的回文串。字符集为 { a , b , c } {a,b,c} {a,b,c}
1 ≤ n , m ≤ 2 × 1 0 5 1leq n,mleq 2times 10^5 1n,m2×105

解题思路

显然只需要考虑长度为 2 , 3 2,3 2,3的回文串,也就是每个字符不能和它距离不超过 2 2 2的位置相等。又因为字符集大小为 3 3 3所以肯定是按照某个 a b c abc abc的排列循环下去的,枚举这个排列即可。


Loj#6467- ‘Zip’ Quine

比较奇怪的题目所以放这里了

题意

一种包含两个语句的语言

  • print x:代码后 x x x行不编译而是直接输出
  • repeat x y:一直输出输出过的倒数第 y y y x x x次(可以输出自己输出的)

要求写一个能输出自己本身的代码

解题思路

核心肯定是repeat语句,我们考虑用repeat语句输出它本身,然后因为因为第一个repeat会多输出些东西所以前面补一些print 1,因为两个print 1会输出一个print 1最后代码就是

print 1
print 1
print 1
print 1
print 1
print 1
repeat 3 2
print 2
repeat 3 2
print 2
repeat 3 2

【LGR-089】洛谷 8 月月赛 II T2

题目大意

给出一个长度为 n n n 0 / 1 0/1 0/1字符串 S S S,然后求一个长度为 m m m个字符串 T T T满足

  1. T T T中不包含子串 S S S
  2. T T T中包含子序列 S S S

1 ≤ n ≤ m , 1 ≤ ∑ m ≤ 2 × 1 0 6 1leq nleq m,1leq sum mleq 2times 10^6 1nm,1m2×106

解题思路

考虑暴力插一个字符进去,好像插在哪都会被卡就随机一下位置和插啥,然后用字符串 h a s h hash hash判就好了。


CF1304C Air Conditioner

题目大意

开始空调温度为 m m m n n n个顾客来的时间不同和适应温度不同。

每个时刻可以使得空调温度变化一度。

求能否满足所有顾客的需求。

1 ≤ n ≤ 100 , 1 ≤ t i , l i , r i , m ≤ 1 0 9 1leq nleq 100,1leq t_i,l_i,r_i,mleq 10^9 1n100,1ti,li,ri,m109

解题思路

每次考虑能够调整到的的区间就好了。


CF1463B Find The Array

题目大意

给出一个长度为 n n n的序列 a a a,要求一个序列 b b b满足

  1. ∣ a ∣ = ∣ b ∣ |a|=|b| a=b
  2. ∀ i ∈ [ 1 , n − 1 ] , b i ∣ b i + 1   o r   b i + 1 ∣ b i forall iin[1,n-1],b_i|b_{i+1} or b_{i+1}|b_i i[1,n1],bibi+1 or bi+1bi
  3. 2 ( ∑ i = 1 n ∣ a i − b i ∣ ) ≤ ∑ i = 1 n a i 2left(sum_{i=1}^n|a_i-b_i|right)leq sum_{i=1}^na_i 2(i=1naibi)i=1nai

1 ≤ n ≤ 50 , 1 ≤ T ≤ 1000 1leq nleq 50,1leq Tleq 1000 1n50,1T1000

解题思路

考虑一下如果差小于 a i a_i ai和的一半就好了,我们把 a a a按照位置奇偶分组,然后看下奇数大还是偶数大,大的 b i = a i b_i=a_i bi=ai,否则 b i = 1 b_i=1 bi=1

显然这样一定是合法的。


CF891A Pride

题目大意

给出一个长度为 n n n的序列 a a a,你每次可以让一个数 g c d gcd gcd上一个相邻的数,求最小的步骤使所有数都变成 1 1 1

1 ≤ n ≤ 2000 , 1 ≤ a i ≤ 1 0 9 1leq nleq 2000,1leq a_ileq 10^9 1n2000,1ai109

解题思路

找到一个最小的 g c d gcd gcd 1 1 1的区间,然后造出一个 1 1 1,之后直接拿 1 1 1改变周围即可。

时间复杂度: O ( n 2 ) O(n^2) O(n2)


AT2387 [AGC016C] +/- Rectangle

题目大意

求一个 W × H Wtimes H W×H的矩阵满足元素和为正数,且任意一个 w × h wtimes h w×h的矩阵和为负数。

1 ≤ w ≤ W ≤ 500 , 1 ≤ h ≤ H ≤ 500 1leq wleq Wleq 500,1leq hleq Hleq 500 1wW500,1hH500

解题思路

如果对一行/列有构造方法那么显然合法,考虑一行的话当且仅当 N % n ≠ 0 N% nneq 0 N%n=0的时候有解(就是每 n n n个填一个 − ( n − 1 ) i n f − 1 -(n-1)inf-1 (n1)inf1,然后其他位置填 i n f inf inf

如果对于行列都无解那么一定无解,因为此时 W % w = 0 , H % h = 0 W%w=0,H%h=0 W%w=0,H%h=0,也就是用上述的方法在二维的情况下也无法让加上一些权值。


AT2266 [AGC008D] K-th K

题目大意

给出长度为 n n n的序列 w w w,构造一个长度 n × n ntimes n n×n的序列满足

  1. 1 ∼ n 1sim n 1n各出现 n n n次。
  2. i i i i i i的位置是 w i w_i wi

1 ≤ n ≤ 500 1leq nleq 500 1n500

解题思路

首先 i i i的前 i − 1 i-1 i1个肯定优先填,我们按照 w i w_i wi从小到大填,然后填到对应位置之后后面的也可以填了,丢进队列里维护一下就好了。


AT2148-[ARC063C]木と整数/Integers on a Tree

题目大意

给出 n n n个点的一棵树,一些点上有数字,然后你要在其他节点上填数字使得每条边连接的两点数字差绝对值为 1 1 1

1 ≤ n ≤ 1 0 5 1leq nleq 10^5 1n105

解题思路

用带数字的点分割出若干个联通块,每个联通块 d f s dfs dfs搜出每个点的数字范围就好了。

至于奇偶性我懒得判,最后直接判得出的那个解是否合法就好了(((


CF1592D Hemose in ICPC ?

题目大意

给出 n n n个点的一棵树,树上的权值不告诉你, D i s t ( x , y ) Dist(x,y) Dist(x,y)表示 x x x y y y路径上的最大值,你每次可以询问一个点集中最大的 D i s t ( x , y ) Dist(x,y) Dist(x,y)是多少,求一个 x , y x,y x,y使得它的 D i s t ( x , y ) Dist(x,y) Dist(x,y)是全图最大的。

1 ≤ n ≤ 1000 1leq nleq 1000 1n1000,询问次数不超过 12 12 12

解题思路

随便找个点当根,那么所有边肯定被某条根到叶子的路径包括,然后再叶子上二分就好了。


AGC052A Long Common Subsequence

题目大意

给出三个长度为 2 n 2n 2n 01 01 01串,保证每个恰好有 n n n 0 0 0 n n n 1 1 1

求一个长度为 2 n + 1 2n+1 2n+1的串使得它是所有其他串的两倍(自己接在自己后面形成的字符串)的子序列。

1 ≤ ∑ n ≤ 1 0 5 1leq sum nleq 10^5 1n105

解题思路

花里胡哨的,两个部分肯定都是各有 n n n 0 0 0 n n n 1 1 1,一个朴素的想法是 n n n 0 0 0+ n n n 1 1 1肯定是满足条件的。

考虑少了的那个怎么补充,考虑接一个 0 0 0,因为是自己接在自己后面,如果最后一个字符是 0 0 0那么显然满足条件,如果最后有 k k k 1 1 1那么在 1 ∼ 2 n − k 1sim 2n-k 12nk这一部分就已经匹配完了前面的 n n n 0 0 0,而后面又可以在到自己的复制之前匹配到 k k k 1 1 1,而在这 k k k个一之前肯定是一个 0 0 0来作为最后一个匹配。


AGC045A Xor Battle

题目大意

有两个人,和一个数字开始时为 0 0 0,第 i i i回合有由 s i s_i si号人操作,可以选择是否让数字异或上 a i a_i ai 0 0 0号人要把数字变为 0 0 0 1 1 1号人反之。

求哪个人获胜。

1 ≤ T ≤ 100 , 1 ≤ n ≤ 200 , 1 ≤ a i ≤ 1 0 18 1leq Tleq 100,1leq nleq 200,1leq a_ileq 10^{18} 1T100,1n200,1ai1018

解题思路

对于一号人的每个操作,零号人都可以通过调整后面它的操作的状态来抵消掉这个操作。具体地如果零号后面的操作数字能够异或出这个数字那这个数字就没有用。

所以换到具体做法就是从后往前扫,每次遇到 0 0 0号操作就加入线性基,不然就判断能不能被异或出来就好了。

时间复杂度: O ( T n log ⁡ L ) O(Tnlog L) O(TnlogL)


CF449D Jzzhu and Numbers

题目大意

给出一个长度为 n n n的序列 a a a,求有多少个子序列的按位和(位运算)为 0 0 0

1 ≤ n , a i ≤ 1 0 6 1leq n,a_ileq 10^6 1n,ai106

解题思路

考虑容斥假设和之后至少有 i i i位有 1 1 1那么容斥系数就是 ( − 1 ) i (-1)^i (1)i,那么高维前缀和处理出数组 f i f_i fi表示包含 i i i的数字个数,然后用答案就是 ∑ i ∈ S 2 f i × ( − 1 ) ∣ S ∣ sum_{iin S} 2^{f_i}times (-1)^{|S|} iS2fi×(1)S

时间复杂度: O ( n log ⁡ n ) O(nlog n) O(nlogn)


ARC132A Permutation Grid

题目大意

给出 n n n的两个排列 R R R C C C
定义一个 n × n ntimes n n×n的黑白网格,满足第 i i i行恰好有 R i R_i Ri个黑格子,第 i i i列恰好有 C i C_i Ci个黑格子。
q q q次询问给出 ( x , y ) (x,y) (x,y)求位置 ( x , y ) (x,y) (x,y)的格子颜色。

1 ≤ n , q ≤ 1 0 5 1leq n,qleq 10^5 1n,q105

解题思路

先考虑极端的情况, R i = 1 R_i=1 Ri=1 C j = n C_j=n Cj=n的情况那么第 i i i列肯定只有 ( i , j ) (i,j) (i,j)是黑色的,然后再考虑 R i ′ = 2 R_{i'}=2 Ri=2 C j ′ = n − 1 C_{j'}=n-1 Cj=n1 ( i ′ , j ) (i',j) (i,j)肯定也是黑色的,然后又因为 ( i , j ′ ) (i,j') (i,j)是白色的,那么 ( i ′ , j ′ ) (i',j') (i,j)肯定也是黑色的。

那么方法就已经很明显了,如果 R i + C j > n R_i+C_j>n Ri+Cj>n那么就是黑色,否则就是白色就好了。


AGC012B Splatter Painting

题目大意

n n n个点 m m m条边的一张图, q q q次操作将距离 x x x不超过 d d d的点都染成颜色 c c c,求最后每个点的颜色。

1 ≤ n , m , q , x , c ≤ 1 0 5 , 1 ≤ d ≤ 10 1leq n,m,q,x,cleq 10^5,1leq dleq 10 1n,m,q,x,c105,1d10

解题思路

f x , i f_{x,i} fx,i表示距离第 x x x个点不超过 i i i距离都得被染色的最后那次操作,然后暴力转移就好了。


AGC013C Ants on a Circle

题目大意

n n n只蚂蚁在长度为 L L L的环上爬,速度都是 1 1 1,撞到对方就转头,求 T T T秒后每只蚂蚁的位置。

1 ≤ n ≤ 1 0 5 , 1 ≤ L , T ≤ 1 0 9 1leq nleq 10^5,1leq L,Tleq 10^9 1n105,1L,T109

解题思路

一个很经典的做法是我们不需要管转头,因为如果每只蚂蚁都一样转头相当于没转。

然后考虑之后怎么定位每只蚂蚁,发现如果没有蚂蚁经过环的话蚂蚁之间的排名是不会变的。

但是如果有蚂蚁经过环,那么其实无论是哪只蚂蚁都会让所有蚂蚁的排名根据经过环的方向转动。

之接求每只蚂蚁经过环的次数即可。


CF1672D

题目大意

你有一个长度为 n n n的数字串 a a a和它的排列 b b b,你每次可以选择一对 ( i , j ) (i,j) (i,j)满足 a i = a j ( i < j ) a_i=a_j(i<j) ai=aj(i<j),将 [ i , j ] [i,j] [i,j]这个区间顺时针旋转。
求能否将其变为 b b b
1 ≤ a i ≤ n ≤ 2 × 1 0 5 1leq a_ileq nleq 2times 10^5 1ain2×105

解题思路

考虑反过来做,那么就是如果有一个 b i = b i + 1 b_i=b_{i+1} bi=bi+1,你就可以将 b i b_i bi丢到前面去往前插,那么我们用一个桶存下所有可以随意移动的 b i b_i bi,然后如果不能移动就一直匹配 a i a_i ai直到不能移动的 b i b_i bi被匹配。

时间复杂度: O ( n ) O(n) O(n)

最后

以上就是搞怪白昼为你收集整理的水题杂做(的全部内容,希望文章能够帮你解决水题杂做(所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部