2020牛客寒假演算法基礎集訓營1

2021-10-02 17:14:12 字數 3984 閱讀 5751

f maki和tree

umi對弓道非常痴迷。

有一天,她在研究乙個射箭問題:

在乙個無限大的平面中,她站在 (x0

,y0)

(x_0,y_0)

(x0​,y

0​) 這個座標。

有n

nn個靶子,第i

ii 個靶子的座標是

umi準備在x

xx軸或 y

yy 軸上放置一塊擋板來擋住弓箭的軌跡,使得她可以射中的靶子數量不超過 k

kk 個。

她想知道擋板的最短長度是多少?

注:假定弓箭的軌跡是起點為umi座標、長度無窮大的射線。umi和靶子的體積可以無視。擋板的邊緣碰到弓箭軌跡也可視為擋住弓箭。

注2:擋板不能彎折,起始和終點必須在同一座標軸上。

題解不要想難,根據題意即可知,板子要麼在x軸上,要麼在y軸上

就求x軸的交點,然後算能否有長度l

ll的板子符合題意

求y

yy軸的交點,然後算是否有長度l

ll的板子符合題意

#pragma comment(linker, "/stack:102400000,102400000")

#pragma gcc optimize(3, "ofast", "inline")

#include

#include

using

namespace std;

using

namespace __gnu_pbds;

const

double pi =

acos(-

1.0)

;const

double eps =

1e-12

;typedef

long

long ll;

const

int maxn =

1e5+10;

typedef

struct point vec;

struct point

double

len(

)//模長

vec chuizhi()

double

operator*(

const point& i_t)

const

//點積

double

operator^(

const point& i_t)

const

//叉積

point operator*(

double u)

const

bool

operator==(

const point& i_t)

const

point operator/(

double u)

const

point operator+(

const point& i_t)

point operator-(

const point& i_t)

friend

bool

operator

<

(point a, point b)

void

atn2()

friend ostream&

operator

<<

(ostream& out, point& a)

friend istream&

operator

>>

(istream& in, point& a)};

point p[maxn]

;int n;

vector<

double

> xx, yy;

intbijiao

(double x,

double y)

double inf =

1e30

;int

main()

for(

int i =

1; i <= n; i++

)sort

(xx.

begin()

, xx.

end())

;sort

(yy.

begin()

, yy.

end())

;double minn = inf;

for(

int i =

0; i + m -

1< xx.

size()

; i++

)for

(int i =

0; i + m -

1< yy.

size()

; i++)if

(bijiao

(minn, inf)==0

) cout <

<< endl;

else

printf

("%.7f\n"

, minn)

;return0;

}

有一天,maki拿到了一顆樹。所謂樹,即沒有自環、重邊和迴路的無向連通圖。

這個樹有n

nn個頂點,n−1

n-1n−

1 條邊。每個頂點被染成了白色或者黑色。

maki想知道,取兩個不同的點,它們的簡單路徑上有且僅有乙個黑色點的取法有多少?

注:①樹上兩點簡單路徑指連線兩點的最短路。

②題解對於乙個黑色的點,其對應的路徑取法,是與它相連的白色點聯通塊f[i

]f[i]

f[i]

有關的即∑1k

∑ikf

[i]∗

f[j]

+∑1k

f[i]

\sum_^\sum_^f[i]*f[j]+\sum_^f[i]

∑1k​∑i

k​f[

i]∗f

[j]+

∑1k​

f[i]

然後求相連的聯通塊大小,用dfs也行,並查集也行

#pragma comment(linker, "/stack:102400000,102400000")

#pragma gcc optimize(3, "ofast", "inline")

#include

#include

using

namespace std;

using

namespace __gnu_pbds;

const

double pi =

acos(-

1.0)

;const

double eps =

1e-8

;typedef

long

long ll;

const ll inf = llong_max;

const ll enf = llong_min;

const

int maxn =

1e6+10;

const

int inf = __int_max__;

const

int enf = int_min;

char s[maxn]

;vector<

int> e[maxn]

;int f[maxn]

, si[maxn]

;intfa(

int x)

vector<

int> v;

intmain()

f[i]

= i;

si[i]=1

;}for(

int i =

1; i < n; i++

) ll sum =0;

for(

auto it : v)

} cout << sum << endl;

return0;

}

2020牛客寒假演算法基礎集訓營

長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...

2020牛客寒假演算法基礎集訓營1

找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...

2020牛客寒假演算法基礎集訓營1

h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...