前言
平时闲的无聊写的或者口嗨的水题就不水博客了。
CF1545A AquaMoon and Strange Sort
题意
给出nnn个数字的一个序列,每次可以交换相邻的两个数字,求是否能够将序列从小到大排序且每个数字被交换次数为偶数。
n≤105n\leq 10^5n≤105
解题思路
其实就是每个数字的奇偶位置不能变,按照奇偶位置排序然后判断是否有序即可
[USACO15OPEN]Palindromic Paths G
题意
n∗nn*nn∗n的字母矩阵,求有多少条从(1,1)(1,1)(1,1)出发只向右和下走的路径满足经过的路径是一个回文串。
n≤500n\leq 500n≤500
解题思路
两头同时出发,设fi,j,kf_{i,j,k}fi,j,k表示走了iii步,两头的横坐标分别是j,kj,kj,k,这样可以压掉一维状态了,然后滚动卡长
P4873 [USACO14DEC]Cow Jog G
题意
nnn头牛,每头牛从pip_ipi出发,速度为viv_ivi,跑TTT秒。
求最少多少个赛道可以使所有牛之间没有冲突。
1≤n≤1051\leq n\leq 10^51≤n≤105
解题思路
两头牛有冲突当且仅当aaa的起始位置小于等于bbb,而aaa的终止位置大于等于bbb。因为起始位置单调,所以算出终止位置然后求最长不升子序列即可。
P3535 [POI2012]TOU-Tour de Byteotia
题意
给出nnn个点mmm条边的一张无向图,求至少删掉多少条边才能让编号不超过kkk的点都不在任何一个环上。
解题思路
考虑一下如果一个点在环上,显然删掉关键点连着的边不会亏,所以肯定存在一种方案只删去连接关键点的边。
所以我们可以优先连接所有的非关键点的边,然后剩下的跑一个类似最小生成树的就好了。
P5505 [JSOI2011]分特产
题意
nnn个人,mmm种特产。第iii种特产有aia_iai个 ,要求每个人都分到一个特产,求方案数。
1≤n,m,ai≤10001\leq n,m,a_i\leq 10001≤n,m,ai≤1000
解题思路
考虑二项式反演,这样就可以去掉每个人都分到的条件了。
CF1555D Say No to Palindromes
题意
给出一个串,每次询问一个区间表示将这个区间子串提出来之后至少要修改多少个字符才能使得没有长度大于111的回文串。字符集为{a,b,c}\{a,b,c\}{a,b,c}。
1≤n,m≤2×1051\leq n,m\leq 2\times 10^51≤n,m≤2×105
解题思路
显然只需要考虑长度为2,32,32,3的回文串,也就是每个字符不能和它距离不超过222的位置相等。又因为字符集大小为333所以肯定是按照某个abcabcabc的排列循环下去的,枚举这个排列即可。
Loj#6467- ‘Zip’ Quine
比较奇怪的题目所以放这里了
题意
一种包含两个语句的语言
print x
:代码后xxx行不编译而是直接输出repeat x y
:一直输出输出过的倒数第yyy行xxx次(可以输出自己输出的)
要求写一个能输出自己本身的代码
解题思路
核心肯定是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
题目大意
给出一个长度为nnn的0/10/10/1字符串SSS,然后求一个长度为mmm个字符串TTT满足
- TTT中不包含子串SSS
- TTT中包含子序列SSS
1≤n≤m,1≤∑m≤2×1061\leq n\leq m,1\leq \sum m\leq 2\times 10^61≤n≤m,1≤∑m≤2×106
解题思路
考虑暴力插一个字符进去,好像插在哪都会被卡就随机一下位置和插啥,然后用字符串hashhashhash判就好了。
CF1304C Air Conditioner
题目大意
开始空调温度为mmm,nnn个顾客来的时间不同和适应温度不同。
每个时刻可以使得空调温度变化一度。
求能否满足所有顾客的需求。
1≤n≤100,1≤ti,li,ri,m≤1091\leq n\leq 100,1\leq t_i,l_i,r_i,m\leq 10^91≤n≤100,1≤ti,li,ri,m≤109
解题思路
每次考虑能够调整到的的区间就好了。
CF1463B Find The Array
题目大意
给出一个长度为nnn的序列aaa,要求一个序列bbb满足
- ∣a∣=∣b∣|a|=|b|∣a∣=∣b∣
- ∀i∈[1,n−1],bi∣bi+1orbi+1∣bi\forall i\in[1,n-1],b_i|b_{i+1}\ or\ b_{i+1}|b_i∀i∈[1,n−1],bi∣bi+1 or bi+1∣bi
- 2(∑i=1n∣ai−bi∣)≤∑i=1nai2\left(\sum_{i=1}^n|a_i-b_i|\right)\leq \sum_{i=1}^na_i2(∑i=1n∣ai−bi∣)≤∑i=1nai
1≤n≤50,1≤T≤10001\leq n\leq 50,1\leq T\leq 10001≤n≤50,1≤T≤1000
解题思路
考虑一下如果差小于aia_iai和的一半就好了,我们把aaa按照位置奇偶分组,然后看下奇数大还是偶数大,大的bi=aib_i=a_ibi=ai,否则bi=1b_i=1bi=1。
显然这样一定是合法的。
CF891A Pride
题目大意
给出一个长度为nnn的序列aaa,你每次可以让一个数gcdgcdgcd上一个相邻的数,求最小的步骤使所有数都变成111。
1≤n≤2000,1≤ai≤1091\leq n\leq 2000,1\leq a_i\leq 10^91≤n≤2000,1≤ai≤109
解题思路
找到一个最小的gcdgcdgcd为111的区间,然后造出一个111,之后直接拿111改变周围即可。
时间复杂度:O(n2)O(n^2)O(n2)
AT2387 [AGC016C] +/- Rectangle
题目大意
求一个W×HW\times HW×H的矩阵满足元素和为正数,且任意一个w×hw\times hw×h的矩阵和为负数。
1≤w≤W≤500,1≤h≤H≤5001\leq w\leq W\leq 500,1\leq h\leq H\leq 5001≤w≤W≤500,1≤h≤H≤500
解题思路
如果对一行/列有构造方法那么显然合法,考虑一行的话当且仅当N%n≠0N\% n\neq 0N%n=0的时候有解(就是每nnn个填一个−(n−1)inf−1-(n-1)inf-1−(n−1)inf−1,然后其他位置填infinfinf)
如果对于行列都无解那么一定无解,因为此时W%w=0,H%h=0W\%w=0,H\%h=0W%w=0,H%h=0,也就是用上述的方法在二维的情况下也无法让加上一些权值。
AT2266 [AGC008D] K-th K
题目大意
给出长度为nnn的序列www,构造一个长度n×nn\times nn×n的序列满足
- 1∼n1\sim n1∼n各出现nnn次。
- 第iii个iii的位置是wiw_iwi。
1≤n≤5001\leq n\leq 5001≤n≤500
解题思路
首先iii的前i−1i-1i−1个肯定优先填,我们按照wiw_iwi从小到大填,然后填到对应位置之后后面的也可以填了,丢进队列里维护一下就好了。
AT2148-[ARC063C]木と整数/Integers on a Tree
题目大意
给出nnn个点的一棵树,一些点上有数字,然后你要在其他节点上填数字使得每条边连接的两点数字差绝对值为111。
1≤n≤1051\leq n\leq 10^51≤n≤105
解题思路
用带数字的点分割出若干个联通块,每个联通块dfsdfsdfs搜出每个点的数字范围就好了。
至于奇偶性我懒得判,最后直接判得出的那个解是否合法就好了(((
CF1592D Hemose in ICPC ?
题目大意
给出nnn个点的一棵树,树上的权值不告诉你,Dist(x,y)Dist(x,y)Dist(x,y)表示xxx到yyy路径上的最大值,你每次可以询问一个点集中最大的Dist(x,y)Dist(x,y)Dist(x,y)是多少,求一个x,yx,yx,y使得它的Dist(x,y)Dist(x,y)Dist(x,y)是全图最大的。
1≤n≤10001\leq n\leq 10001≤n≤1000,询问次数不超过121212。
解题思路
随便找个点当根,那么所有边肯定被某条根到叶子的路径包括,然后再叶子上二分就好了。
AGC052A Long Common Subsequence
题目大意
给出三个长度为2n2n2n的010101串,保证每个恰好有nnn个000和nnn个111。
求一个长度为2n+12n+12n+1的串使得它是所有其他串的两倍(自己接在自己后面形成的字符串)的子序列。
1≤∑n≤1051\leq \sum n\leq 10^51≤∑n≤105
解题思路
花里胡哨的,两个部分肯定都是各有nnn个000和nnn个111,一个朴素的想法是nnn个000+nnn个111肯定是满足条件的。
考虑少了的那个怎么补充,考虑接一个000,因为是自己接在自己后面,如果最后一个字符是000那么显然满足条件,如果最后有kkk个111那么在1∼2n−k1\sim 2n-k1∼2n−k这一部分就已经匹配完了前面的nnn个000,而后面又可以在到自己的复制之前匹配到kkk个111,而在这kkk个一之前肯定是一个000来作为最后一个匹配。
AGC045A Xor Battle
题目大意
有两个人,和一个数字开始时为000,第iii回合有由sis_isi号人操作,可以选择是否让数字异或上aia_iai,000号人要把数字变为000,111号人反之。
求哪个人获胜。
1≤T≤100,1≤n≤200,1≤ai≤10181\leq T\leq 100,1\leq n\leq 200,1\leq a_i\leq 10^{18}1≤T≤100,1≤n≤200,1≤ai≤1018
解题思路
对于一号人的每个操作,零号人都可以通过调整后面它的操作的状态来抵消掉这个操作。具体地如果零号后面的操作数字能够异或出这个数字那这个数字就没有用。
所以换到具体做法就是从后往前扫,每次遇到000号操作就加入线性基,不然就判断能不能被异或出来就好了。
时间复杂度:O(TnlogL)O(Tn\log L)O(TnlogL)
CF449D Jzzhu and Numbers
题目大意
给出一个长度为nnn的序列aaa,求有多少个子序列的按位和(位运算)为000。
1≤n,ai≤1061\leq n,a_i\leq 10^61≤n,ai≤106
解题思路
考虑容斥假设和之后至少有iii位有111那么容斥系数就是(−1)i(-1)^i(−1)i,那么高维前缀和处理出数组fif_ifi表示包含iii的数字个数,然后用答案就是∑i∈S2fi×(−1)∣S∣\sum_{i\in S} 2^{f_i}\times (-1)^{|S|}∑i∈S2fi×(−1)∣S∣。
时间复杂度:O(nlogn)O(n\log n)O(nlogn)
ARC132A Permutation Grid
题目大意
给出nnn的两个排列RRR和CCC。
定义一个n×nn\times nn×n的黑白网格,满足第iii行恰好有RiR_iRi个黑格子,第iii列恰好有CiC_iCi个黑格子。
qqq次询问给出(x,y)(x,y)(x,y)求位置(x,y)(x,y)(x,y)的格子颜色。
1≤n,q≤1051\leq n,q\leq 10^51≤n,q≤105
解题思路
先考虑极端的情况,Ri=1R_i=1Ri=1且Cj=nC_j=nCj=n的情况那么第iii列肯定只有(i,j)(i,j)(i,j)是黑色的,然后再考虑Ri′=2R_{i'}=2Ri′=2且Cj′=n−1C_{j'}=n-1Cj′=n−1时(i′,j)(i',j)(i′,j)肯定也是黑色的,然后又因为(i,j′)(i,j')(i,j′)是白色的,那么(i′,j′)(i',j')(i′,j′)肯定也是黑色的。
那么方法就已经很明显了,如果Ri+Cj>nR_i+C_j>nRi+Cj>n那么就是黑色,否则就是白色就好了。
AGC012B Splatter Painting
题目大意
nnn个点mmm条边的一张图,qqq次操作将距离xxx不超过ddd的点都染成颜色ccc,求最后每个点的颜色。
1≤n,m,q,x,c≤105,1≤d≤101\leq n,m,q,x,c\leq 10^5,1\leq d\leq 101≤n,m,q,x,c≤105,1≤d≤10
解题思路
记fx,if_{x,i}fx,i表示距离第xxx个点不超过iii距离都得被染色的最后那次操作,然后暴力转移就好了。
AGC013C Ants on a Circle
题目大意
有nnn只蚂蚁在长度为LLL的环上爬,速度都是111,撞到对方就转头,求TTT秒后每只蚂蚁的位置。
1≤n≤105,1≤L,T≤1091\leq n\leq 10^5,1\leq L,T\leq 10^91≤n≤105,1≤L,T≤109
解题思路
一个很经典的做法是我们不需要管转头,因为如果每只蚂蚁都一样转头相当于没转。
然后考虑之后怎么定位每只蚂蚁,发现如果没有蚂蚁经过环的话蚂蚁之间的排名是不会变的。
但是如果有蚂蚁经过环,那么其实无论是哪只蚂蚁都会让所有蚂蚁的排名根据经过环的方向转动。
之接求每只蚂蚁经过环的次数即可。
CF1672D
题目大意
你有一个长度为nnn的数字串aaa和它的排列bbb,你每次可以选择一对(i,j)(i,j)(i,j)满足ai=aj(i<j)a_i=a_j(i<j)ai=aj(i<j),将[i,j][i,j][i,j]这个区间顺时针旋转。
求能否将其变为bbb。
1≤ai≤n≤2×1051\leq a_i\leq n\leq 2\times 10^51≤ai≤n≤2×105
解题思路
考虑反过来做,那么就是如果有一个bi=bi+1b_i=b_{i+1}bi=bi+1,你就可以将bib_ibi丢到前面去往前插,那么我们用一个桶存下所有可以随意移动的bib_ibi,然后如果不能移动就一直匹配aia_iai直到不能移动的bib_ibi被匹配。
时间复杂度:O(n)O(n)O(n)