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
kf[
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...