K皇后(洛谷 P2105 K皇后)

2021-10-13 07:58:16 字數 966 閱讀 8517

思路:

首先看到題目的資料範圍是2e4顯然二維陣列是肯定不行的,先不說時間,單是記憶體就不夠用。雖然不能使用二維陣列,但如果可以一行一行的解決問題也是可以的,但用暴力只能60分,汗~~~~。於(shang)是(wang)想(sou)到(suo)通過每乙個皇后對某一行的影響來計算這一行最後剩下了多少位置,每一次sum求和就可以了,最終的時間複雜度大概是o(n*k).

ps: 這道題還用到了一丟丟數學知識:已知直線方程的斜率、線上乙個點的座標和另一點的橫座標求其縱座標。

#include

#include

using

namespace std;

int x[

505]

, y[

505]

;int row[

20005

], col[

20005];

int sum =

0, cnt =0;

int n, m, k, a;

//a是橫座標

intmain()

for(

int i =

1; i <= n; i++

)//數學思想:斜率為1和-1的直線方程

//求當前皇后是否影響了當前行

a = i + y[j]

- x[j];if

(a >=

1&& a <= m&&col[a]==0

)//1

a = y[j]

+ x[j]

- i;

if(a >=

1&& a <= m&&col[a]==0

)//-1

} sum +

= cnt;}}

cout << sum;

return0;

}

大概就是這樣了,自己還是太菜了~~~

洛谷 八皇后

題目傳送門 好的滿分方法 傳送門 它講的非常詳細,仔細一看方法和我的差不多,不同點在於斜的兩個標記和豎的標記它分別為這個開了三個陣列,然後用來存這裡是否已經被占領,然後遞迴完下乙個再恢復,我本來也想這樣的,但我只想到用乙個二維陣列的方法,這樣是不可能回溯的,所以導致我最後乙個資料超時而他沒超時 通過...

洛谷 P1219 八皇后

題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 ...

洛谷 P1219 八皇后

題目描述 檢查乙個如下的6 x 6的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行 每列有且只有乙個,每條對角線 包括兩條主對角線的所有平行線 上至多有乙個棋子。上面的布局可以用序列2 4 6 1 3 5來描述,第i個數字表示在第i行的相應位置有乙個棋子,如下 行號 1 2 3 4 5 6 列號 2 ...