USACO 1 5 跳棋的挑戰

2021-06-10 07:18:40 字數 1407 閱讀 8064

★☆   輸入檔案:checker.in輸出檔案:checker.out簡單對比

時間限制:1 s   記憶體限制:128 mb

【問題描述】

檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行,每列,每條對角線(包括兩條主對角線的所有對角線)上都至多有乙個棋子,如下例,就是一種正確的布局。

1 2 3 4 5 6
-------------------------
1 | | o | | | | |
-------------------------
2 | | | | o | | |
-------------------------
3 | | | | | | o |
-------------------------
4 | o | | | | | |
-------------------------
5 | | | o | | | |
-------------------------
6 | | | | | o | |
-------------------------
上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下:

行號 1 2 3 4 5 6

列號 2 4 6 1 3 5

這只是跳棋放置的乙個解。請寫乙個程式找出所有跳棋放置的解,並把它們以上面的序列方法輸出。解按字典順序排列,請輸出前3個解,最後一行是解的總個數。

【輸入格式】

乙個數字n (6 <= n <= 14) 表示棋盤是n x n大小的。

【輸出格式】

前三行為前三個解,每個解的兩個數字之間用乙個空格隔開。第四行只有乙個數字,表示解的總數。

【輸入輸出樣例】

(checker.in)6

(checker.out)

2 4 6 1 3 5

3 6 2 5 1 4

4 1 5 2 6 3 4

搜尋。。當n=13和n=14時,普通搜尋會超時、、需要用二進位制優化。。我**的用打表過的。

#includeusing namespace std;

int ans[20];

bool vis[20];

bool add[20],sub[50];

int n,cnt,num;

void dfs(int x){

if(x==n+1){

num++;

if(num<=3){

for(int i=1;i

USACO1 5 特殊的質數肋骨

題目描述 農民約翰的母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上的數字 7331是質數 三根肋骨 733是質數 二根...

USACO1 5 特殊的質數肋骨

題目描述 農民約翰的母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上的數字 7331是質數 三根肋骨 733是質數 二根...

USACO15DEC 最大流Max Flow題解

題目 從乙個點運輸牛奶到另乙個點,求最大壓力的點是那個點?很顯然,運輸牛奶是從乙個點運輸到這兩個點的lca之後再運到另乙個點 最後是修改很顯然乙個點乙個點去加一是tle的所以,我們要用乙個差分的思想 用record陣列,兩個點各加一,lca減一,lca的父親減一 最後用dfs搜尋一遍就出答案了 ta...