2200 專項 B Cubes(stl 模擬)

2021-09-25 05:03:49 字數 1772 閱讀 5279

原題:

題意:

有m個方塊,每個有座標(x,

y)

(x,y)

(x,y

),值從0到m-1,這個方塊是穩定的當且僅當(x−

1,y−

1)(x

,y−1

)(x+

1,y−

1)

(x-1,y-1)(x,y-1)(x+1,y-1)

(x−1,y

−1)(

x,y−

1)(x

+1,y

−1)存在方塊或者y為0,初始時穩定。

你和對手輪流乙個乙個抽出所有方塊,這個序列對應的m進製數就是答案,你要答案大,對手要答案小,問最後的答案。

解析:

由於進製的關係,所以一定是貪心。那麼先用map預處理出每個方塊的上下6個方向是否有方塊,然後用陣列代替map進行搜尋即可。

#include

using

namespace std;

#define ll long long

const

int maxn=

1e5+5;

const ll mod=

1e9+9;

int x[maxn]

,y[maxn]

;bool vis[maxn]

;int n;

set<

int>s;

vector<

int>ans;

unordered_mapint>id;

inline ll key

(int a,

int b)

int arr[maxn][6

];void

init()

}inline

bool

can(

int i)}if

(!vis[arr[i][0

]])}

if(!vis[arr[i][2

]])}

return1;

}void

used

(int i)

void

era(

int i)if(

!vis[arr[p][5

]])}

p=arr[i][0

];if(

!vis[p])if

(!vis[arr[p][4

]])}

p=arr[i][2

];if(

!vis[p])if

(!vis[arr[p][5

]])}

}void

fin_new

(int i)

p=arr[i][3

];if(

!vis[p]

) p=arr[i][5

];if(

!vis[p])}

intmain()

init()

;for

(int i=

1;i<=n;i++

)while

(!s.

empty()

)}ll bas=

1,a=0;

for(

int i=ans.

size()

-1;i>=

0;i--

)printf

("%lld\n"

,a);

}

2200 專項 D 0 1 Tree(樹形dp)

原題 題意 給出一棵樹,每條邊有邊權0或1,現在要找出有序對的對數,滿足要求 x到y的路徑不能在遇到1後再遇到0。解析 顯然只有四種狀態 從上往下記錄為1 0 10 01,那麼用dp記錄每個點的子樹中,下面的點與之路徑為對應情況的點數。轉移 設d p p 0 0,dp p 1 1,d p p 10 ...

HDU 2200 Eddy s AC難題 數論

解析 1 可以從中任選m個人 n m 2 有cn m 中選擇 2 再把這m個人分2組 每個人都要分組 要使滿足最小ac數大於最大ac數,只需要在m個人中插板即可 例如 m個人假如分別為 1,2,3,4,m 1,m m個人的ac數從小到大排列 只需在任意位置插板就可分為符合要求的2組 1,2,3.t,...

樹狀陣列專項

poj 2352 此題一開始理解錯了乙個地方,而且一開始也沒很好的理解樹狀陣列,做了很長時間。其實此題的輸入是有規律的,即一直按照x,y遞增的規律。所以,判斷第i個輸入,只需要判斷 前i 1個元素中x的值,而不用考慮y,因為y一直是遞增輸入的。所以用乙個樹狀陣列來處理x即可。include incl...