牛客練習賽13 F 皇后

2022-05-29 08:24:09 字數 1621 閱讀 5798

在乙個n*n的西洋棋棋盤上有m個皇后。

乙個皇后可以攻擊其他八個方向的皇后(上、下、左、右、左上、右上、左下、右下)。

對於某個皇后,如果某乙個方向上有其他皇后,那麼這個方向對她就是不安全的。

對於每個皇后,我們都能知道她在幾個方向上是不安全的。

現在我們想要求出t0,t1,...,t8,其中ti表示恰有i個方向是"不安全的"的皇后有多少個。

第一行兩個整數n,m表示棋盤大小和皇后數量。

接下來m行每行兩個整數ri,ci表示皇后座標。

1 <= n, m <= 100,000

1 <= r

i

, c
i

<= n

資料保證沒有皇后在同乙個位置上。

一行九個整數表示答案。

空格隔開,結尾無空格

示例1

8 4

4 34 8

6 51 6

0 3 0 1 0 0 0 0 0
示例2

10 3

1 11 2

1 3

0 2 1 0 0 0 0 0 0

分析:這個題有點技巧,八個方向想象成四條直線,每條直線排序,一共四次排序,

每次排序後統計一遍就好了。

這題比賽的時候沒做出來啊qaq

#include#include

using

namespace

std;

struct

nodea[

100100

];int sum[100100

];int t[10

];int

cmp1(node a,node b)

intcmp2(node a,node b)

intc***(node a,node b)

intcmp4(node a,node b)

intmain()

sort(a,a+m,cmp1);

for(int i=1;i)

if(a[i-1].x==a[i].x)

sort(a,a+m,cmp2);

for(int i=1;i)

if(a[i-1].y==a[i].y)

sort(a,a+m,c***);

for(int i=1;i)

if(a[i-1].x+a[i-1].y==a[i].x+a[i].y)

sort(a,a+m,cmp4);

for(int i=1;i)

if(a[i-1].x-a[i-1].y==a[i].x-a[i].y)

for(int i=0;i)

t[sum[i]]++;

for(int i=0;i<8;i++) printf("

%d "

,t[i]);

printf(

"%d\n

",t[8

]);

return0;

}

view code

牛客小白月賽13 F題

小a這次來到乙個景區去旅遊,景區裡面有n個景點,景點之間有n 1條路徑。小a從當前的乙個景點移動到下乙個景點需要消耗一點的體力值。但是景區裡面有兩個景點比較特殊,它們之間是可以直接坐觀光纜車通過,不需要消耗體力值。而小a不想走太多的路,所以他希望你能夠告訴它,從當前的位置出發到他想要去的那個地方,他...

牛客練習賽58 F

求帶單點修改的樹上兩點間任意子路徑長異或和。路徑長等於路徑上所有異或和。簡單模擬一下,可以發現。奇數情況下,答案是偶數點異或和。偶數情況下,就是正常的異或和。偶數點異或和也很容易處理。分深度奇偶樹狀陣列即可。但是這是對於鏈的,不能直接dfs dfsdf s序,需要剖分一下。但是我不會,所以去學了一下...

牛客練習賽13 烏龜跑步 DP

有乙隻烏龜,初始在0的位置向右跑。這只烏龜會依次接到一串指令,指令t表示向後轉,指令f表示向前移動乙個單位。烏龜不能忽視任何指令。現在我們要修改其中正好n個指令 乙個指令可以被改多次,一次修改定義為把某乙個t變成f或把某乙個f變成t 求這只烏龜在結束的時候離起點的最遠距離。假設烏龜最後的位置為x,我...