Gym 101470 题解
A:Banks
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e5 + ;
int v[N];
int ans = ;
int l[N], r[N];
int main()
{
freopen("A.in", "r", stdin);
int n;
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d", &v[i]);
for(int i = ; i < n; ++i) r[i] = i + ;
r[n] = ;
for(int i = ; i <= n; ++i) l[i] = i - ;
l[] = n; int tot = , now = ;
while(true){
if(tot == n) break; if(v[now] < ){
v[r[now]] += v[now];
v[l[now]] += v[now];
v[now] = -v[now];
tot = , ans++;
}
else{
tot++;
}
now = r[now];
} printf("%d\n", ans);
return ;
}
B:Circle of digits
题意:有一个环形的字符串,现在让你把它切成n段,要求切了之后,所有的串的最大值最小。
题解:我们可以知道 这长度为m的字符串中 最大值的那个字符串长度一定是m = n/k(向上取整), 故答案一定是从环上的每个点出发,然后走m步的串中的一个。 然后我们对这些答案排序, 排完序之后,二分答案。 然后对于每次二分完答案,我们都去check答案, 每次都往从1号位置枚举起点,枚举到m就够了,因为从m+1的位置出发一定是前面的一段的一个过程了,就不需要继续枚举答案了。
然后现在有一个问题就是比较, 对于这个字符串来说, 我们hash之后比较字符串的大小, 先二分hash值,找到第一个能使得这段hash值不相同的地方,然后再比较这个位置的信息就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 2e5 + ;
ULL base = ;
char s[N];
ULL Hash[N], Hash_val[N];
int n, m, k;
void init(){
Hash[] = ;
for(int i = ; i < N; ++i)
Hash[i] = Hash[i-] * base;
for(int i = ; i <= *n; ++i)
Hash_val[i] = Hash_val[i-] * base + s[i] - '';
}
ULL Get_Hash(int l, int r){
return Hash_val[r] - Hash_val[l-] * Hash[r-l+];
}
int A[N];
bool cmp(int L1, int L2){
int l = , r = m;
while(l <= r){
int mid = l+r >> ;
if(Get_Hash(L1, L1+mid-) == Get_Hash(L2, L2+mid-)) l = mid + ;
else r = mid - ;
}
if(l > m) return false;
return s[L1+l-] < s[L2+l-];
}
bool cmp2(int i, int j){
return cmp(i, j);
}
bool check(int x){ for(int i = ; i <= m; ++i){
int b = i;
for(int j = ; j <= k; ++j){
if(cmp(x,b) == false) b = b + m;
else b = b + m - ;
}
if(b-i >= n) return true;
}
return false;
}
int main(){
freopen("B.in","r",stdin);
scanf("%d%d", &n, &k);
m = (n+k-)/k;
scanf("%s", s+);
for(int i = n+; i <= n*; ++i) s[i] = s[i-n];
s[*n+] = '\0';
init();
for(int i = ; i <= n; i++)
A[i] = i;
sort(A+, A++n, cmp2);
int l = , r = n;
while(l <= r){
int mid = l+r >> ;
if(check(A[mid]) == false) l = mid + ;
else r = mid - ;
}
for(int i = A[l]; i <= A[l]+m-; ++i)
printf("%c", s[i]);
return ;
}
C: UFO
题意: 现在有n×m的一个矩形,每个格子内都会有若干个正方体。 现在射k次激光,每次激光输入为 ( c x h) c 是 方向 x是第几行/列, 然后射掉r个正方体, 射完之后正方体会掉下来, 现在问你射完k次激光之后,矩形内选出一个p*p的正方形, 这里面的最大的值是多少。
题解:
建立n+m棵线段树, 每次修改的时候 找到 [L,R]的这个区间内部中 >= h的的最左或者最右格子的位置是在哪里, 然后在2棵对应的树上修改对应的位置。
然后再进行下一次查询,从新的[L,R]区间中重新找。
然后再把矩形还原回来,再找到最大子矩形。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e6 + ;
int n, m, r, k, P;
vector<int> vc[N];
vector<int> xtree[N];
vector<int> ytree[N];
vector<int> *p;
int op, g;
void build(int l, int r, int rt){
if(l == r){
if(op) (*p)[rt] = vc[g][l];
else (*p)[rt] = vc[l][g];
return ;
}
int m = l+r >> ;
build(lson); build(rson);
(*p)[rt] = max((*p)[rt<<], (*p)[rt<<|]);
}
int Lpos;
void FindL(int L, int l, int r, int rt, int h){
if((*p)[rt] < h) return ;
if(l == r) {
Lpos = min(Lpos, l);
return ;
}
int m = l+r >> ;
if(L <= l){
if((*p)[rt<<] >= h) FindL(L,lson,h);
else FindL(L,rson,h);
}
else if(L > m) FindL(L,rson,h);
else if(L <= m){
if((*p)[rt<<] >= h) FindL(L,lson,h);
if((*p)[rt<<|] >= h) FindL(L,rson,h);
}
}
int Rpos;
void FindR(int R, int l, int r, int rt, int h){
if((*p)[rt] < h) return ;
if(l == r){
Rpos = max(Rpos, r);
return ;
}
int m = l+r >> ;
if(R >= r){
if((*p)[rt<<|] >= h) FindR(R,rson,h);
else FindR(R,lson,h);
}
else if(R <= m) FindR(R,lson,h);
else if(R > m){
if((*p)[rt<<|] >= h) FindR(R,rson,h);
if((*p)[rt<<] >= h) FindR(R,lson,h);
}
}
void Change(int L, int l, int r, int rt){
if(l == r){
(*p)[rt]--;
return ;
}
int m = l+r >> ;
if(L <= m) Change(L,lson);
else Change(L,rson);
(*p)[rt] = max((*p)[rt<<], (*p)[rt<<|]);
}
void boom(int l, int r, int rt){
if(l == r){
vc[g][l] = (*p)[rt];
return ;
}
int m = l+r >> ;
boom(lson); boom(rson);
}
int main(){
freopen("C.in","r",stdin);
scanf("%d%d%d%d%d", &n, &m, &r, &k, &P);
for(int i = ; i <= n; ++i){
vc[i].resize(m+);
xtree[i].resize((m+)<<);
}
for(int i = ; i <= m; ++i)
ytree[i].resize((n+)<<);
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j){
scanf("%d", &vc[i][j]);
}
op = ;
for(int i = ; i <= n; ++i){
p = &xtree[i];
g = i;
build(,m,);
} op = ;
for(int i = ; i <= m; ++i){
p = &ytree[i];
g = i;
build(,n,);
}
char op[];
int x, h;
while(k--){
scanf("%s", op);
scanf("%d%d", &x, &h);
if(op[] == 'N') {
int lst = ;
for(int i = ; i <= r; i++){
Lpos = inf;
p = &ytree[x];
FindL(lst, , n, , h);
if(Lpos == inf) break;
Change(Lpos, , n, );
p = &xtree[Lpos];
Change(x, , m, );
lst = Lpos + ;
if(lst > n) break;
}
}
else if(op[] == 'W'){
int lst = ;
for(int i = ; i <= r; i++){
Lpos = inf;
p = &xtree[x];
FindL(lst, , m, , h);
if(Lpos == inf) break;
Change(Lpos, , m, );
p = &ytree[Lpos];
Change(x, , n, );
lst = Lpos + ;
if(lst > m) break;
}
}
else if(op[] == 'E'){
int lst = m;
for(int i = ; i <= r; i++){
Rpos = ;
p = &xtree[x];
FindR(lst, , m, , h);
if(Rpos == ) break;
Change(Rpos, , m, );
p = &ytree[Rpos];
Change(x, , n, );
lst = Rpos - ;
if(lst < ) break;
}
}
else if(op[] == 'S'){
int lst = n;
for(int i = ; i <= r; i++){
Rpos = ;
p = &ytree[x];
FindR(lst, , n, , h);
if(Rpos == ) break;
Change(Rpos, , n, );
p = &xtree[Rpos];
Change(x, , m, );
lst = Rpos - ;
if(lst < ) break;
}
}
}
for(int i = ; i <= n; ++i){
p = &xtree[i];
g = i;
boom(,m,);
}
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j){
vc[i][j] += vc[i][j-];
if(vc[i][j] >= mod) vc[i][j] -= mod;
}
int ans = ;
for(int j = ; j <= m; ++j)
for(int i = ; i <= n; ++i){
vc[i][j] += vc[i-][j];
if(vc[i][j] >= mod) vc[i][j] -= mod;
if(i >= P && j >= P){
int tmp = vc[i][j];
tmp -= vc[i-P][j];
tmp -= vc[i][j-P];
tmp += vc[i-P][j-P];
while(tmp < ) tmp += mod;
while(tmp >= mod) tmp -= mod;
ans = max(tmp, ans);
}
}
printf("%d\n", ans);
return ;
}
/* 4 8 2 6 2
1 1 1 1 1 1 1 1
1 2 3 1 1 1 3 1
1 2 1 1 3 1 1 1
1 1 1 1 1 1 1 2
N 2 2
W 2 2
W 2 3
E 2 1
S 4 1
S 7 1
*/
D:Frame
题意:现在有若干个 1 × k 的长方形条, 现在问能不能刚好对 n × m 的矩形的最外面一圈填满。
题解:check一下左上角的格子是竖着填还是横着填的就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("d.in","r",stdin);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e5 + ;
int n, m, x;
bool check1(int x){
int mm = m - ;
mm %= x;
if(mm > ) return false;
int nn = n % x;
if(nn > ) return false;
int mmm;
if(nn == ) mmm = m;
else mmm = m - ;
mmm %= x;
if(mmm > ) return false;
int nnn = n - + mm + mmm;
nnn %= x;
if(nnn) return false;
return true;
}
bool check2(int x){
int mm = m;
mm %= x;
if(mm > ) return false;
int nn = n - ;
nn %= x;
if(nn > ) return false;
int mmm = m - + nn;
mmm %= x;
if(mmm > ) return false;
int nnn = n - + mm + mmm;
nnn %= x;
if(nnn) return false;
return true; }
int main(){
int T;
Fopen;
scanf("%d%d", &n, &m);
scanf("%d", &T);
while(T--){
scanf("%d", &x);
if(check1(x) || check2(x)) {
puts("YES");
}
else puts("NO");
}
return ;
}
E:Points
题意:现在2维平面上有若干个点,现在要求找到一个多边形,使得长度最小,并且所有的点都在矩形的内部,不包括边上。 多边形的边只能是格子的对角线或者是沿着格子的边。
题解:先找到一个最小矩形,能把所有点都包括在内部的矩形。 然后再从4个角考虑, 往里缩。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("E.in","r",stdin);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e5 + ;
pll p[N];
int main(){
Fopen;
int n;
int x1, y1, x2, y2;
scanf("%d", &n);
for(int i = ; i <= n; ++i) {
scanf("%d%d", &p[i].fi, &p[i].se);
if(i == ) x1 = x2 = p[i].fi, y2 = y1 = p[i].se;
x1 = min(p[i].fi, x1); y1 = min(p[i].se, y1);
x2 = max(p[i].fi, x2); y2 = max(p[i].se, y2);
}
x1--, y1--, x2++, y2++;
LL ans = 2ll*(x2-x1 + y2-y1);
LL cnt = ;
int maxx = x1, xx;
for(int i = ; i <= n; ++i){
xx = p[i].fi - (p[i].se - y1);
maxx = max(maxx, xx);
}
maxx++;
ans -= (x2-maxx) * ;
cnt += x2-maxx;
int minx = x2;
for(int i = ; i <= n; ++i){
xx = p[i].fi + (p[i].se - y1);
minx = min(minx, xx);
}
minx--;
ans -= (minx-x1) * ;
cnt += minx-x1;
maxx = x1;
for(int i = ; i <= n; ++i){
xx = p[i].fi - (y2 - p[i].se);
maxx = max(maxx, xx);
}
maxx++;
ans -= (x2 - maxx) * ;
cnt += x2 - maxx;
minx = x2;
for(int i = ; i <= n; ++i){
xx = p[i].fi + (y2 - p[i].se);
minx = min(minx, xx);
}
minx--;
ans -= (minx - x1) * ;
cnt += minx - x1;
//cout << cnt << endl; double tt = sqrt() * cnt + ans;
printf("%f", tt);
return ;
}
F:Most Influential Pumpkin
题意:现在有一个长度为n的数组,现在有k次操作,给[l, r]这个区间里面的所有数+1, 现在问你每次操作之后的中位数大小是多少。
题解:
暴力分块。 修改的时候就对散的块暴力重构,整个块就打个lz标记。
对于查询来说,我们最容易想到的就是2分套2分,然后找到答案。
但是这个复杂度实在太大,最终会T。
可以发现他每次只会对区间里面的数执行+操作,并且是+1。
所以我们可以发现每次中位数要么是上次修改之后的值,要么是比上次修改的值刚好大1。
这样我们最后每次操作的复杂度就是 (√n + √nlg√n + √nlg√n) 这样的复杂度就说的过去了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("F.in","r",stdin);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 6e4 + ;
int n, m, blo, num;
int a[N], b[N];
int l[N], r[N], lz[N];
void update(int x){
for(int i = l[x]; i <= r[x]; ++i)
b[i] = a[i];
sort(b+l[x], b+r[x]+);
}
void build(){
blo = sqrt(n) + ;
num = n / blo;
if(n%blo) num++;
for(int i = ; i <= num; i++){
l[i] = blo * (i-) + ;
r[i] = blo * i;
lz[i] = ;
}
r[num] = n;
for(int i = ; i <= num; i++)
update(i);
}
void Add(int ll, int rr){
int b1 = (ll + blo -)/ blo;
int b2 = (rr + blo -)/ blo;
for(int i = b1+; i < b2; ++i)
++lz[i];
if(b1 != b2){
for(int i = ll; i <= r[b1]; ++i) ++a[i];
update(b1);
for(int i = l[b2]; i <= rr; ++i) ++a[i];
update(b2);
}
else {
for(int i = ll; i <= rr; ++i) ++a[i];
update(b1);
}
}
int boom(int x){
int ret = ;
for(int i = ; i <= num; ++i){
int tmp = x - lz[i];
int pos = upper_bound(b+l[i], b+r[i]+, tmp) - b - l[i];
ret += pos;
}
return ret;
}
int need = ;
int mid;
int c[N];
int main(){
Fopen;
while(~scanf("%d%d", &n, &m) && n+m){
need = n / + ;
for(int i = ; i <= n; ++i){
scanf("%d", &a[i]);
c[i] = a[i];
}
sort(c+, c++n);
mid = c[need];
build();
for(int i = ,ll,rr; i <= m; ++i){
scanf("%d%d",&ll,&rr);
Add(ll,rr);
if(boom(mid) < need) mid++;
printf("%d\n", mid);
}
}
return ;
}
H:Triples
题解:
我们明白 a^j + b^j = c^j 当 a,b,c > 0 && j > 2上是无解的。
对于j==2的时候我们暴力求解。
然后对于j>3的时候 我们明白只有 a = 0, b = c 这种才合法,直接计算就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("H.in","r",stdin);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e5 + ;
int main(){
int ans = ;
int n, m;
Fopen;
scanf("%d%d", &m, &n);
//n = n*n*n;
for(int i = ; i <= m; ++i)
for(int j = i; j <= m; ++j)
for(int k = j; k <= m; ++k){
if(i*i+j*j == k*k) ans++;
}
//int cnt = 0; ans += (m+) * (n-);
printf("%d\n", ans);
return ;
}
J:Strange Antennas
题意:求被辐射的点。
题解:维护每行来说点的变数, 就是维护出对于每个位置来说,哪一列会对他产生影响,哪一列会消除影响。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 3e4 + ;
vector<int> vc[N];
int n, m;
int vis[N];
inline bool check(int x, int y){
if(x < || y < || x > n || y > n) return false;
return true;
}
int main(){
freopen("J.in","r",stdin);
scanf("%d%d", &n, &m);
for(int i = ; i <= m; ++i){
int x, y, r, op;
scanf("%d%d%d%d", &x, &y, &r, &op);
if(op == ){
for(int i = ; i < r; ++i){
if(check(x+,y++i)){
vc[x+].pb(y++i);
}
}
x = x + ; y = y + r;
while(r--){
if(check(x,y)) vc[x].pb(y);
++x; --y;
}
}
else if(op == ){
++x;
for(int i = ; i < r; ++i){
if(check(x,y-i)) vc[x].pb(y-i);
}
x++, y = y - r + ;
while(r--){
if(check(x,y)) vc[x].pb(y);
++x;++y;
}
}
else if(op == ){
++y;
for(int i = ; i < r; ++i)
if(check(x+,y+i)) vc[x+].pb(y+i);
x = x - r + ;
while(r--){
if(check(x,y)) vc[x].pb(y);
else if(check(,y)) vc[].pb(y);
++x;++y;
}
}
else if(op == ){
for(int i = ; i < r; ++i)
if(check(x+,y-i)) vc[x+].pb(y-i);
x = x - r + ;
while(r--){
if(check(x,y)) vc[x].pb(y);
else if(check(,y)) vc[].pb(y);
x++, y--;
}
}
}
int ans = ;
int cnt = ;
for(int i = ; i <= n; i++){
for(auto y : vc[i]){
vis[y] ^= ;
if(vis[y]) cnt++;
else cnt--;
}
ans += cnt;
}
printf("%d\n", ans);
return ;
}
Gym 101470 题解的更多相关文章
- Gym 100851 题解
A: Adjustment Office 题意:在一个n*n的矩阵,每个格子的的价值为 (x+y), 现在有操作取一行的值,或者一列的值之后输出这个和, 并且把这些格子上的值归0. 题解:模拟, 分成 ...
- Gym 101482 题解
B:Biking Duck 题意:现在有一个人要从(x1,y1)点走到(x2,y2)点, 现在走路的速度为v. 还有骑自行车的速度v2,自行车要从某个自行车站到另一个自行车站,现在我们可以视地图的边界 ...
- Gym 101964 题解
B:Broken Watch (别问,问就是队友写的) 代码: import java.awt.List; import java.io.BufferedInputStream; import jav ...
- 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解
D 考虑每个点被删除时其他点对它的贡献,然后发现要求出距离为1~k的点对有多少个. 树分治+FFT.分治时把所有点放一起做一遍FFT,然后减去把每棵子树单独做FFT求出来的值. 复杂度$nlog^ ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解
题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...
- Codeforces GYM 100876 J - Buying roads 题解
Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...
- Codeforces Gym 102392F Game on a Tree (SEERC2019 F题) 题解
题目链接:https://codeforces.com/gym/102392/problem/F 题意:被这题题意坑了很久,大意是说有一棵根为 \(1\) 的树,每个节点初始都是白色, \(Alice ...
- Gym 101480I Ice Igloos(思维乱搞)题解
题意:给个最多500 * 500的平面,有半径最多不为1的n个圆,现在给你1e5条线段,问你每条线段和几个圆相交,时限10s 思路: 因为半径<1,那么我其实搜索的范围只要在线段附近就好了.x1 ...
随机推荐
- angularjs通信以及postmessage与iframe通信
这篇文章是用markdown工具写的,有需要的可以使用vscode打开 # angularjs 控制器.组件之间的通信 ## 一.基于事件的方式 此方式下,主要通过 angularjs 内置指令` ...
- Java内部类超详细总结(含代码示例)
什么是内部类 什么是内部类? 顾名思义,就是将一个类的定义放在另一个类的内部. 概念很清楚,感觉很简单,其实关键在于这个内部类放置的位置,可以是一个类的作用域范围.一个方法的或是一个代码块的作用域范围 ...
- Activiti6系列(5)- 核心API
前言 本来想把<疯狂工作流讲义-activiti6.0>这本书里面的实例拿过来,但是这本书我看完后,认为里面编写的activiti6的核心API代码片段不是很清晰,有不少需要雕琢的地方才好 ...
- Hadoop单机、伪分布式、分布式集群搭建
JDK安装 设置hostname [root@bigdata111 ~]# vi /etc/hostname 设置机器hosts [root@bigdata111 ~]# vi /etc/hosts ...
- Kafka集群配置---Windows版
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,Kafka对消息进行保存时是通过tipic进行分组的.今天我们仅实现Kafka集群的配置.理论的抽空在聊 前言 最近研究kafka,发现网上很多 ...
- vue中的虚拟DOM树
什么是虚拟DOM树?(Virtual DOM) 虚拟DOM树其实就是一个普通的js对象,它是用来描述一段HTML片段的 01 当页面渲染的时候Vue会创建一颗虚拟DOM树 02 ...
- Kubernetes 服务发现
目录 什么是服务发现? 环境变量 DNS 服务 Linux 中 DNS 查询原理 Kubernetes 中 DNS 查询原理 调试 DNS 服务 存根域及上游 DNS 什么是服务发现? 服务发现就是一 ...
- 暂停研发surging,是否继续维护!
前言 surging从2017 年开始,2 年来利用业余时间为 surging语言添砖加瓦. 这种活雷锋行为并没有得到开发者们的理解,很多人甚至用命令的口吻,灵魂拷问方式要求活雷锋们再苦再累也得免费为 ...
- Winform 自定义文本框
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- .net软件日常开发规范-基本标准
一. 基本标准 代码和SQL脚本均不要出现无意义的空格和空行. 所有SQL脚本确保可以重复运行不出错,添加数据的脚本重复运行不会重复添加数据. 能用一行代码或脚本解决的不要写出两行,能用一个方法解决的 ...