本題其實就是乙個暴搜+結論的題目,具體題解在下方。
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檔案...