\(n\)個柱子,每個柱子上面\(m\)個大小相同、顏色不同的球,尋找一種移球方案使得每個柱子上面的球顏色相同。
這題思維難度比較高,**實現難度不大,考場打了乙個假掉的做法,看了正解以後感覺非常之妙。
做法挺自然的,首先考慮只有兩種顏色的情況:
對於\(n>2\)的情況,可以考慮分治,將所有球染為黑白兩色,同顏色的也染為同顏色,然後給這些球各自分配一半的柱子,然後繼續遞迴下去就可以解決了。大概計算一下,總共的移球次數是在\(800000\)左右。
#include#include#include#define n 60
#define m 500
using namespace std;
int n,m,i,j,c[n][m],ans,ans1[1000000][3],num,id[m],cnt[n];
int read()
return x;
}void move(int x,int y,int num)
}void dfs(int l,int r)
else
} move(n+1,x,s2);
move(y,x,s1);
move(n+1,y,s1);
} for (i=1;i<=num-1;i++)
if (s1==m||s1==0) continue;
if (s1+s2>m)
else
} dfs(l,mid);dfs(mid+1,r);
}int main()
dfs(1,n);
printf("%d\n",ans);
for (i=1;i<=ans;i++) printf("%d %d\n",ans1[i][1],ans1[i][2]);
return 0;
}
NOIP2020 移球遊戲
題目鏈結 考慮乙個基本操作,如果有兩個柱子 x,y 是滿的,z 是空的,這 2m 個球中有 m 個關鍵球,要把所有的關鍵球移到同一根柱子上。設 x 柱上有 a 個關鍵球,操作如下 1 把 y 柱頂部的 a 個球移到 z 柱。2 把 x 柱上的球依次移走,如果是關鍵球就移到 y 柱,否則移到 z 柱。...
CSP S 2020 T3函式呼叫
這道題的難度大概是這次提高組最難的一題了,考試時一直在想線段樹合併,發現時間過不了以後就放棄打了暴力。關於這道題,可以容易發現,對於乘法操作,直接最後乘上即可,對於加法操作,只需要將加的數乘上後面乘的數就行了。所以可以得出乙個做法 首先可以考慮反著做一次拓撲排序,求出每次操作中包含了多少次乘法操作。...
NOIP模擬(20171024)T3 數學
求滿足方程ax xa mod2n 的解的個數 n 30,a 109詢問組數t 1000 引理一 若a,b 均為奇數,且a2 k 1 b2k 1 mod2n 則a b mod2n 證明 a 2k 1 b2k 1 mod2n a 2k 1 b2k 1 0 mod2n a b a2k a2k 1b a2k...