A:Battle of Balls
把左右边界也看成点,如果球不能在两个点之间过去,就在点之间拉上一条警戒线,当警戒线把顶层和底层分割开来就说明球不可能到达顶层(PS:注意精度
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 50;
int fa[maxn];
double eps = 1e-8;
int fnd(int x){
if(x == fa[x]) return x;
return fa[x] = fnd(fa[x]);
}
void link(int x, int y){
int rx = fnd(x);
int ry = fnd(y);
if(rx != ry) fa[rx] = ry;
}
double x[maxn],y[maxn];
double r;
double dis(int i, int j){
double d = (x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]);
d = sqrt(d);
return d;
}
int main(){
int T;cin>>T;
while(T--){
int n;
scanf("%d%lf", &n, &r);
r *= 2;
for(int i = 0; i <= n+1; ++i) fa[i] = i;
for(int i = 1; i <= n; ++i) {
scanf("%lf%lf",&x[i],&y[i]);
if(x[i] - r < eps) link(0, i);
if(x[i] + r - 100.0 > -eps) link(i, n+1);
}
for(int i = 1; i <= n; ++i){
for(int j = i+1; j <= n; ++j){
if(dis(i, j) - r < eps) link(i, j);
}
}
if(fnd(0) == fnd(n+1)) printf("No\n");
else printf("Yes\n");
}
}
B: Icebound and Sequence
另ai = q^i, Sn = a1 + a2 + … + an, 则有Sn = Sn-1 + qan-1, an = qan-1, 上矩阵快速幂。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,q,mod;
struct mt{
ll