什么是构造
构造题是一种题型。
不同于其它的算法、数据结垢题,根据查询输出结果;构造题是让你给出一组方案,使得在一定限制内符合条件。
从形式上来看,问题的答案往往具有某种规律性,使得在问题规模迅速增大的时候,仍然有机会比较容易地得到答案。
这要求解题时要思考问题规模增长对答案的影响,这种影响是否可以推广。例如,在设计动态规划方法的时候,要考虑从一个状态到后继状态的转移会造成什么影响。
构造题一个很显著的特点就是高自由度,也就是说一道题的构造方式可能有很多种,但是会有一种较为简单的构造方式满足题意。看起来是放宽了要求,让题目变的简单了,但很多时候,正是这种高自由度导致题目没有明确思路而无从下手。
构造题另一个特点就是形式灵活,变化多样。并不存在一个通用解法或套路可以解决所有构造题,甚至很难找出解题思路的共性。
构造题的解法
构造题的经典算法有二分、分治、排序、图论算法如网络流,2-SAT,最短路等等。也会用到一些数学公式推导求出构造方法。
考虑问题时,我们往往从小情况入手,再构造大的情况。
有时我们也会考虑特殊情况,自己添加条件限制范围。
题解(21.8.29)
CF1438D Powerful Ksenia
题目描述
给 n ( 3 ≤ 1 0 5 ) n(3 \le 10^5) n(3≤105) 个正整数 a i a_i ai, 1 ≤ a i ≤ 1 0 9 1 \le a_i\le10^9 1≤ai≤109.
每次操作是选三个不同的下标 i , j , k i,j,k i,j,k ,让 a i , a j , a k a_i,a_j,a_k ai,aj,ak 都变成 a i ⊕ a j ⊕ a k a_i \oplus a_j\oplus a_k a