★☆ 輸入檔案: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...