191024省選測試題解

2021-09-28 22:56:54 字數 4260 閱讀 7727

t1:有n個不相交矩形障礙,求從原點走到某個目標點的最短路,目標點在x軸上

顯然矩形的右端點是沒用的,我們保留左邊即可

顯然不會往左走,dp一下是n

2n^2

n2的,用掃瞄線優化一下即可

#include

#define pb push_back

#define ll long long

using

namespace std;

inline

intread()

while

(isdigit

(ch)

)return res*f;

}const

int n=

5e5+

5,inf=

1e9;

inline

intd

(int x1,

int y1,

int x2,

int y2)

int n,aim;

struct sqr

}p[n]

;struct info

info

(int _x,

int _y,

int _dis):x

(_x),y

(_y)

,dis

(_dis)

inline

bool

operator

<

(const info &rhs)

const};

sets;

intmain()

s.insert

(info(0

,0,0

));sort

(p+1

,p+n+1)

;for

(int i=

1;i<=n;i++

) s.

insert

(info

(p[i]

.lx,p[i]

.ry,l));

s.insert

(info

(p[i]

.lx,p[i]

.ly,r));

}int ans=inf;

for(set

::iterator it=s.

begin()

;it!=s.

end(

);it++

) ans=

min(ans,it-

>dis+

d(aim,

0,it-

>x,it-

>y));

cout

}

t2:loj火鍋盛宴

乙個優先佇列維護沒熟的,乙個線段樹維護熟的,然後模擬就完了

#include

#define pii pair

#define pb push_back

#define mp make_pair

#define ll long long

#define fi first

#define se second

#define db double

using

namespace std;

inline

charnc(

)inline

intread()

struct info

info

(int _x,

int _id):x

(_x),id

(_id)

inline

bool

operator

>

(const info &rhs)

const};

int n;

const

int n=

1e5+5;

namespace segtreetr[n<<2]

;#define ls tr[k].l

#define rs tr[k].r

#define mid (ls+rs>>1)

inline

void

build

(int k,

int l,

int r)

inline

void

modify

(int k,

int pos)

inline

intquery_min

(int k)

inline

intquery_pos

(int k,

int pos)

int res=0;

if(pos<=mid) res=

query_pos

(k<<

1,pos)

;else res=

query_pos

(k<<1|

1,pos)

; tr[k]

.sum-

=res;

return res;

}inline

intquery_seq

(int k,

int ql,

int qr)

}using

namespace segtree;

int w[n]

;priority_queue

,greater

>q;

deque<

int>son[n]

;inline

void

file()

intmain()

if(op==0)

else

if(op==1)

else

if(op==2)

else}}

return0;

}

t3:給出乙個多邊形的三角剖分,求乙個由多邊形頂點構成的三角形使得它與盡量多的三角形有交,求最大交數

構造乙個對偶圖(不包含最外面那個平面),一定是一棵樹,然後樹上一條連線兩個葉子的路徑對應一種連兩個頂點交三角形的方案,且數量就是路徑長度

則我們要找乙個三角形就是三條路徑,樹形dp即可

code:

#include

#define pii pair

#define mp make_pair

#define pb push_back

#define ll long long

using

namespace std;

inline

intread()

while

(isdigit

(ch)

)return res*f;

}const

int n=

1e5+5;

int vis[n<<1]

,head[n<<1]

,nxt[n<<1]

,tot=0;

inline

void

add(

int x,

int y)

mapint>m;

int n,cnt=

0,ans=0;

int h[n]

;void

dfs1

(int v,

int fa)

++h[v];}

void

dfs2

(int v,

int fa,

int val)

ans=

max(ans,val+1)

; ans=

max(ans,dp[0]

+val+1)

; ans=

max(ans,dp[0]

+dp[1]

+val+1)

;for

(int i=head[v]

;i;i=nxt[i])}

intmain()

for(

int j=

0;j<

2;j++

)for

(int k=j+

1;k<

3;k++

) m[

mp(seq[j]

,seq[k])]

=cnt;

++cnt;

}dfs1(0

,-1)

;dfs2(0

,-1,

0); cout

}

19 2 18 測試題解

題太水了懶得乙個乙個發 t1 題意就是5000000個點,10000000條邊,邊權只有1或2,求最短路 我的做法 先bb一句,要開始考試的時候l讓我和gigo,gsy去樓下考,我說看一下題再決定,然後他說 你看,第一題是裸的最短路。又因為我懶得搬東西去樓下並且不想承受爆零 墊底的壓力,於是就留在樓...

7 21模擬測試題解

用nlogn求出最長不下降子串行長度然後判長度是否有n 1就行了 因為每個數只能用一次,所以前i個數所能組成的最大和為a 1 a 2 a i 若a i 1 a 1 a 2 a i 1 則因為比a 1 a 2 a i 大的下乙個數必 a i 1 所以a 1 a 2 a i 1為答案。include i...

2018 10 25 模擬測試題解

目錄問題 b 蜀傳之單刀赴會 問題 c 吳傳之火燒連營 本篇題解也發表於zwcblog作者是同乙個人 眾所周知,劉備在長阪坡上與他的一眾將領各種開掛,硬生生從曹操手中逃了出去,隨後與孫權一 燒赤壁 占有荊益 成就霸業。而曹操則在赤壁一敗後再起不能,終生無力南下。建安二十五年 220年 曹操已到風燭殘...