(接上題,反正是一起做的那麼故事情節也接上吧嘻嘻嘻)
「正好,帶我去一趟天線崖。」
」你確定?!你都說了都要暴雨了,前幾天的暴雨……「
」是啊,你還抱怨整天悶在家裡啥事也沒幹呢,結果就剩下我在刷題而你整天再睡覺。「
因為山脈的阻隔,所以他們只能乘坐小船到達那裡。
而給他們租小船的人,開出了很高的價錢,但是。
」你們幫我解決乙個問題,我就免費帶你們去你們想去的地方。「
他指了指酒館前面做的乙個漢子,漢子的桌子上擺著乙個很大的六邊形棋盤。
————————————————————————
時間限制: 1s 空間限制:256m
棋盤是由許多個六邊形構成的,共有5種不同的六邊形編號為1到5,棋盤的生成規
則如下:
1.從中心的乙個六邊形開始,逆時針向外生成乙個個六邊形。
2.對於剛生成的乙個六邊形,我們要確定它的種類,它的種類必須滿足與已生成的相
鄰的六邊形不同。
3.如果有多個種類可以選,我們選擇出現次數最少的種類。
4.情況3下還有多個種類可以選,我們選擇數字編號最小的。
現在要你求第n個生成的六邊形的編號。
輸入格式:
第一行:t,表示資料組數
接下來t行,每行乙個數:n,表示第n個六邊形
輸出格式:
共t行,每行乙個數,表示第n個資料的答案
樣例輸入:
4 1
4 10
100
樣例輸出:
1 4
5 5
資料範圍:
100%資料滿足
1<=t<=20
1<=n<=10000
30%資料滿足
1<=n<=100
————————————————
今天的模擬都很有意思?!
這道明顯是找規律的題卻意外的不好找規律。
思考一下,恩……大概是六邊形使我們石樂志。
但是大家的普遍打法都是靠六邊形轉換成矩形,然後打表。
我們想一想……
這道題難道真的無規律可循嗎?!
當答案找不到規律時,我們想想能夠匯出答案的東西是否有規律。
是啊,如果我們知道每乙個六邊形的相鄰情況的話完全模擬就可以解決啊!
這就是規律:
遵從題意,我們從起點開始,按放數字的順序依次編號為1,2……
接下來,我們知道與1相鄰的有2,3,4,5,6,7
那麼因為1相鄰著2,所以2相鄰著1
又因為2肯定相鄰著3
所以與2相鄰有1,3
然而還差四個點為7,8,9,10
好的上述的內容總結為三條規律:
對於點i,找到與它所有相鄰的六個點
已知i-1的點所鄰的最大編號的點為k
1.從1~i-1,如果有與i相鄰的點,就加上
2.i+1一定與i相鄰
3.上述兩步操作完後所得的相鄰點的個數為n<6,那麼接下來的點分別為k+0,k+1……直到n==6為止
其實我們還可以證明這個的正確性(然而再寫下去我的手就抽筋了,證明就交給大家了?)
#include
#include
#include
#include
#include
using
namespace
std;
int l[10001][7]=;
int f[10001]=;
int cnt[6]=;
int ji[10001]=;
bool ok[10001]=;
void chu()
ok[1]=1;
for(int i=1;i<=10000;i++)
}elseelse
}ji[i]=6;ok[i]=1;
i--;}}
return;
}bool ha[7];
int main()else
int minn=2147483647;
for(int j=1;j<=5;j++)
}for(int j=1;j<=5;j++)}}
}printf("%d\n",f[n]);
maxn=max(maxn,n+1);
}return
0;}
六邊形平面
現在有乙個n n的六邊形網格平面 這種平面類似蜂窩形狀 下圖是n 1,2,3,4條件下的具體形狀,根據它們可以依次類推n 5,6,現在你需要對n n網格中一些格仔進行上色,在給定的輸入中這些格仔被標記上字元 x 而不用上色的網格被標記為 上色時需要注意,如果兩個被上色的格仔有公共邊,那麼這兩個格仔需...
2701 六邊形點陣
題目描述 description 輸入六邊形的邊長n,請你畫出這個六邊形點陣。輸入描述 input description 僅一行,乙個整數n 輸出描述 output description 六邊形點陣 有兩條邊水平 樣例輸入 sample input 6 樣例輸出 sample output 資料...
HTML畫六邊形
1.方法1 上下兩個三角,中間乙個長方形 方法2 t 25deg,transparent 36px,rgb 76,184,233 0 bottom left background size 50 50 background repeat no repeat position absolute lef...