什麼是構造題?
不同於維護資料結構並回答詢問的資料結構,尋找最大值和最小值的最值問題,計數問題,但構造體致力於讓你給出一組方案,使得在一定的限制內滿足某些條件,方案通常不唯一,構造方法也可以不唯一
比如:1.給定乙個排列,允許元素交換操作,輸出一組操作使之排序
2.輸入乙個數,輸出乙個邊長為整數的非直角三角形,且該三角形的面積為n
3.沒有輸入
解題方法
比如二分,分治,排序,圖論,網路流,2-sat,最短路等
再比如數學公式直接求出來
還比如歸納法,先考慮通過構造小的情況,再通過小的情況構造大的情況
考慮特殊情況,比如要求構造乙個特定的圖,可以自己新增條件限制範圍,比如特定的二分圖,特定的樹,特定的鏈等,乙個常見的條件為對稱性,構造具有數學美的答案
思路如果只有三個數的話,一次就能操作完了
如果n=4的話,一次操作變成了aaab,或者abbb,如果a不等於b,那麼就是無解
n等於5的話
a,b,c,d,e
於是我們發現了乙個好辦法,如果三個數是aab的形式,可以變成bbb
如果我們把數弄成aabbccdd...fff的形式,那麼就可以連續使用xxf的形式將所有的數字全都變成f
操作次數頂多為(n-3)/2*2+1=n-2
如果是偶數個數呢
剛才的操作的話a,b,c,d,e,f
見ppt,如果y=f,實際上可以證明無解
#include #include #include #include #include using namespace std;
const int maxn=100005;
int n,ans;
int a[maxn];
int main()
)=y+1\),這就非常想染
我們可以設\(\sum_^-1}f(i) \equiv p(mod\space a)\),則有
\(\sum_^-1}\)
\(=f(10^+0)+\sum_^-1}f(i)\)
\(=1+\sum_^-1}f(i) \equiv p+1(mod \space a)\)
similarly
我們可以推出
\(\sum_^+1}f(i) \equiv p+2(mod \space a)\)
到\(\sum_^+a-p-1}f(i) \equiv 0(mod \space a)\)
所以就有
\(l=a-p,r=10^+a-p-1\)時,構造出如題意的一組hack資料
於是我們需要求個p
\(\sum_^-1}f(i)\)
=\(45 \times10^+10 \times \sum_^-1}f(i)\)
\(=45 \times 10^+10 \times (45 \times 10^)+100 \times \sum_^-1}f(i)\)
繼續按照上述方式化簡
\(=81 \times 10^\)
即\(p=81 \times 10^mod \space a\)
然後就解出來了
#include #include #include #include #include using namespace std;
const long long inf=1e18;
long long l,r,mod;
int main()
for(int i=1;i<=n;i++)
}
題目
給出乙個無重邊的無向圖,每個點的度數大於等於3,和乙個限制k,需要你構造以下兩種情況中的一種:
1.找出一條路徑長度為n/k
2.找出k個環,使得每個環的長度大於3並且不是3的倍數,並且要求保證每個環中至少有乙個點在這k個環裡只出現一次
思路構造圖的另乙個套路:無向圖太麻煩了,考慮圖的生成樹
在數學競賽的證明上也有用處qaq
考慮乙個dfs生成樹
如果生成樹的深度n>=n/k,問題不就解決了嗎
否則存在k個不同的葉子
圖中的dfs生成樹
滿足條件:所有非樹邊連線的都是祖先
由於度數大於等於3,對於葉子k存在兩個祖先x,y使得k連向x,y
這樣有三個環
如果前兩個是三的倍數,那麼第三個一定不是3的倍數,因為dep(y)-dep(x)是3的倍數
即noip2020的一道題目(ps:giao,就是因為我csp爆零了才去不了的,kk
思路考慮兩種顏色的情況。也就是說有2個柱和乙個額外的空柱
對於乙個柱a,怎麼把0和1分開呢?
暫時利用另乙個柱b,首先,計算0的個數為x,將b上x個移到額外的柱子c上
接著不斷移動a上面的球,如果是0就移動到b,否則移動到c
最後吧0,1的段依次移回去,b上的x個也移回去
用了多少次?
x+m+m+x<=m+m+m+m=4m
如果把x改成0,1個數中較小的那個,那麼我們有x+m+m+x<=3m
如果拓展到n種顏色?
用分治,把1~n/2視為顏色0,n/2到n視為顏色1
嚴格定義遞迴的過程
solve(l,r)表示所有l-r的顏色的球都在柱子l-r,每次需要維持額外柱是空,
對每個柱子排序需要3nm
如何那個顏色1的球都放到後一半?
對於兩個柱子,如果他們中1的數量超過m,那麼可以將所有0放到空柱子,然後製造出乙個1的柱子,然後再把0放進去,如果它們中0的數量大於m,那麼可以首先將乙個柱全都放到空柱,然後另乙個柱把0放過來,然後再依次從空柱放0和1過來,製造出乙個0的在柱子
思路乙個想法:既然只是要求符號變反而已,那麼直接測試一些特定的s如何?
顯然可以被叉掉,所以它fst了
考慮mask小於2的情況。要麼是全部去翻,要麼是全部不取反
假設我們已經解決了mask小於2的k次方的
全程NOIP計畫 數學推導選講
柯西不等式 對於數列a和b,有以下恆成立 sum na i 2 sum n b i 2 ge sum na ib i 2 令 a sum a i 2,b sum a ib i,c sum b i 2 構造以下式子 f x ax 2 2bx c sum a ix b i 2 ge 0 a i 2x 2...
NOIP模擬 數球(思維題)
小a有n個球,編號分別為1到n,小a每次都會從n個球中取出若干個球,至少取乙個,至多取n個,每次取完再放回去,需要滿足以下兩個條件。1 每次取出的球的個數兩兩不同。2 每次取出的球的集合兩兩不包含。包含是指,對於兩次取球,對於取的數目少的那次取球的所有球都出現在取的數目多的那次取球中,例如 1,2 ...
NOIP模擬 數球(思維題)
小a有n個球,編號分別為1到n,小a每次都會從n個球中取出若干個球,至少取乙個,至多取n個,每次取完再放回去,需要滿足以下兩個條件。1 每次取出的球的個數兩兩不同。2 每次取出的球的集合兩兩不包含。包含是指,對於兩次取球,對於取的數目少的那次取球的所有球都出現在取的數目多的那次取球中,例如 1,2 ...