2018 3 17 模擬賽 3 俄羅斯方塊

2021-08-17 09:34:51 字數 1612 閱讀 3071

共有以下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 度旋轉,還可以左右移動,對於每一次方塊落地,我們要求方塊的每一部分都必須與地面 最底面或己落...