共有以下7種方塊——
在下落的過程中,可以讓方塊90、 180或270 度旋轉,還可以左右移動,對於每一次方塊落地,我們要求方塊的每一部分都必須與地面(最底面或己落下的方塊上表面)接觸,例如,有乙個寬度為6列的平台,每一列的初始高度(已經占用的方格數)分別為2, 1, 1, 1, 0 和 1。編號為5的方塊下落,有且僅有5種不同的落地方法:
列舉每一種方塊所有角度下落所需「地面」高度要求,發現:
方塊1
不旋轉
直接有多少列就有方案總和就加多少
旋轉九十度
a[i]=a[i+1]=a[i+2]=a[i+3] 時方案總和+1
剩下重複
方塊2
不旋轉
a[i]=a[i+1] 時方案總和+1
剩下重複
方塊3
不旋轉
a[i]=a[i+1]=a[i+2]-1 時方案總和+1
旋轉九十度
a[i]=a[i+1]+1 時方案總和+1
剩下重複
…… 知道後+一系列判斷——
#include using namespace std;
int n,k,ans,a[105];
int main()
printf("%d",ans);
return0;
}if (k==2)//第二種方塊
printf("%d",ans);
return0;
}if (k==3)//第三種方塊
if (a[n-1]==a[n]+1)
ans++;
printf("%d",ans);
return0;
}if (k==4)//第四種方塊
if (a[n-1]==a[n]-1)
ans++;
printf("%d",ans);
return0;
}if (k==5)//第五種方塊
if (a[n-1]==a[n]-1)
ans++;
if (a[n-1]==a[n]+1)
ans++;
printf("%d",ans);
return0;
}if (k==6)//第六種方塊
if (a[n-1]==a[n])
ans++;
if (a[n-1]==a[n]+2)
ans++;
printf("%d",ans);
return0;
}if (k==7)//第七種方塊
if (a[n-1]==a[n]-2)
ans++;
if (a[n-1]==a[n])
ans++;
printf("%d",ans);
return0;}}
俄羅斯方塊(NOIP模擬賽)(水 模擬)
真是一道神奇的題目233 原題傳送門 迫不得已貼了個題解的鏈結。好吧,這道題就是分情況討論,純模擬,沒有什麼難的。腦洞要大,四面都要考慮,不能漏 include include using namespace std intc,p,ans int l 101 int absq int a,int b...
2018 3 17 模擬賽 1 無限序列
我們按以下方式產生序列 1 開始時序列是 1 2 每一次變化把序列中的 1 變成 10 0 變成 1 經過無限次變化,我們得到序列 1011010110110101101 然後詢問q次,求a到b之間1的個數 首先,觀察一波 序列的變化為 1 10 101 10110 10110101 然後,我們發現...
模擬 俄羅斯方塊
題目描述 相信大家都玩過 俄羅斯方塊 遊戲吧,俄羅斯方塊 是乙個有趣的電腦小遊戲,現有乙個有c列 行不受限定遊戲平台,每一次下落的方塊是下列的7個圖形的一種 在下落的過程中,遊戲者可以作90 180或270 度旋轉,還可以左右移動,對於每一次方塊落地,我們要求方塊的每一部分都必須與地面 最底面或己落...