染色的立方體 NOI導刊2010提高(03)

2022-04-30 19:18:12 字數 3261 閱讀 5514

本題其實就是乙個暴搜+結論的題目,具體題解在下方。

1.貪心

看能不能找到最佳的合適位置,很顯然:效率低,正確率也低。

2.結論

想起不管上下左右怎樣轉,只有24種轉法,增加了這個條件,就可以爆搜了。

考場即時驗證:

procedure make(mode,x,y:longint);// 草稿列舉上下左右翻轉

begin

if mode=1 then

begin

may_color[x,1]:=may_color[y,1];

may_color[x,2]:=may_color[y,3];

may_color[x,3]:=may_color[y,5];

may_color[x,4]:=may_color[y,2];

may_color[x,5]:=may_color[y,4];

may_color[x,6]:=may_color[y,6];

end;

if mode=2 then

begin

may_color[x,1]:=may_color[y,1];

may_color[x,2]:=may_color[y,4];

may_color[x,3]:=may_color[y,2];

may_color[x,4]:=may_color[y,5];

may_color[x,5]:=may_color[y,3];

may_color[x,6]:=may_color[y,6];

end;

if mode=3 then

begin

may_color[x,1]:=may_color[y,4];

may_color[x,2]:=may_color[y,2];

may_color[x,3]:=may_color[y,1];

may_color[x,4]:=may_color[y,6];

may_color[x,5]:=may_color[y,5];

may_color[x,6]:=may_color[y,3];

end;

if mode=4 then

begin

may_color[x,1]:=may_color[y,3];

may_color[x,2]:=may_color[y,2];

may_color[x,3]:=may_color[y,6];

may_color[x,4]:=may_color[y,1];

may_color[x,5]:=may_color[y,5];

may_color[x,6]:=may_color[y,4];

end;

end;

procedure items;

var i,j,a,b,c,d,e,f,head,tail:longint;

begin

for i:=1 to 6 do

may_color[1,i]:=i;

head:=0;

tail:=1;

repeat //翻轉狀態

inc(head);

for j:=1 to 4 do

begin

inc(tail);

make(j,tail,head);

end;

until tail>=96;

for i:=1 to 96 do

ask[may_color[i,1],may_color[i,2],may_color[i,3],may_color[i,4],may_color[i,5],may_color[i,6]]:=true;

for a:=1 to 6 do for b:=1 to 6 do for c:=1 to 6 do for d:=1 to 6 do for e:=1 to 6 do for f:=1 to 6 do

if ask[a,b,c,d,e,f] then //判斷可能

begin

inc(x);

able[x,1]:=a;

able[x,2]:=b;

able[x,3]:=c;

able[x,4]:=d;

able[x,5]:=e;

able[x,6]:=f;

end;

end;

這裡的able也就是可能翻轉的狀態了。

得出已下狀態:

注釋:add(x,狀態);表示第x個狀態翻轉。

add(1,1,2,3,4,5,6);

add(2,1,3,5,2,4,6);

add(3,1,4,2,5,3,6);

add(4,1,5,4,3,2,6);

add(5,2,1,4,3,6,5);

add(6,2,3,1,6,4,5);

add(7,2,4,6,1,3,5);

add(8,2,6,3,4,1,5);

add(9,3,1,2,5,6,4);

add(10,3,2,6,1,5,4);

add(11,3,5,1,6,2,4);

add(12,3,6,5,2,1,4);

add(13,4,1,5,2,6,3);

add(14,4,2,1,6,5,3);

add(15,4,5,6,1,2,3);

add(16,4,6,2,5,1,3);

add(17,5,1,3,4,6,2);

add(18,5,3,6,1,4,2);

add(19,5,4,1,6,3,2);

add(20,5,6,4,3,1,2);

add(21,6,2,4,3,5,1);

add(22,6,3,2,5,4,1);

add(23,6,4,5,2,3,1);

add(24,6,5,3,4,2,1);

暴搜是地球人都會的:

procedure check;

var i,j,k,sum,km,ss:longint;

begin

ss:=0;

for k:=1 to 6 do

begin

km:=6666;

for i:=1 to n do

begin

sum:=0;

for j:=1 to n do

if j<>i then

if use[i,k]<>use[j,k] then

inc(sum);

if sumpsacal會卡,90分,所以各位看完請寫c++吧

ACM 奇特的立方體

題目描述 奇特的立方體 任意給出8個整數,將這8個整數分別放在乙個立方體的八個頂點上,要求檢驗每個面上的四個數之和相等這個條件能否被滿足。輸入一次輸入8個整數輸出yes或者no yes表示可能構成滿足條件的立方體 no則表示不能 樣例輸入1 2 3 4 5 6 7 8樣例輸出yes 思路 標記8個頂...

方程的解 NOI導刊2010提高

題目描述description佳佳碰到了乙個難題,請你來幫忙解決。對於不定方程a1 a2 ak 1 ak g x 其中k 2且k n,x是正整數,g x x x mod 1000 即x x除以1000的餘數 x,k是給定的數。我們要求的是這個不定方程的正整數解組數。舉例來說,當k 3,x 2時,分別...

OpenGL旋轉立方體的實現

計算機圖形學大作業 使用opengl實現旋轉的正方體。主要分為搭建環境和完成 編寫兩部分。安裝完成後,我們可以建立opengl的demo過程如下 檔案 新建 專案 opengl 直接編譯執行demo,將會展示乙個旋轉的三角形如下圖所示 另外如需使用其他opengl庫,需要自行配置 將相關.dll檔案...