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 题解的更多相关文章

  1. Gym 100851 题解

    A: Adjustment Office 题意:在一个n*n的矩阵,每个格子的的价值为 (x+y), 现在有操作取一行的值,或者一列的值之后输出这个和, 并且把这些格子上的值归0. 题解:模拟, 分成 ...

  2. Gym 101482 题解

    B:Biking Duck 题意:现在有一个人要从(x1,y1)点走到(x2,y2)点, 现在走路的速度为v. 还有骑自行车的速度v2,自行车要从某个自行车站到另一个自行车站,现在我们可以视地图的边界 ...

  3. Gym 101964 题解

    B:Broken Watch (别问,问就是队友写的) 代码: import java.awt.List; import java.io.BufferedInputStream; import jav ...

  4. 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解

      D 考虑每个点被删除时其他点对它的贡献,然后发现要求出距离为1~k的点对有多少个. 树分治+FFT.分治时把所有点放一起做一遍FFT,然后减去把每棵子树单独做FFT求出来的值. 复杂度$nlog^ ...

  5. 2016百度之星 初赛2A ABEF

    只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...

  6. Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解

    题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角 ...

  7. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  8. Codeforces Gym 102392F Game on a Tree (SEERC2019 F题) 题解

    题目链接:https://codeforces.com/gym/102392/problem/F 题意:被这题题意坑了很久,大意是说有一棵根为 \(1\) 的树,每个节点初始都是白色, \(Alice ...

  9. Gym 101480I Ice Igloos(思维乱搞)题解

    题意:给个最多500 * 500的平面,有半径最多不为1的n个圆,现在给你1e5条线段,问你每条线段和几个圆相交,时限10s 思路: 因为半径<1,那么我其实搜索的范围只要在线段附近就好了.x1 ...

随机推荐

  1. Spring 核心技术(5)

    接上篇:Spring 核心技术(4) version 5.1.8.RELEASE 1.4.5 自动装配协作者 Spring 容器可以自动连接协作 bean 之间的关系.你可以让 Spring 通过检查 ...

  2. Mobile game forensics

    My friend Carrie'd like to know "Garena 传说对决" violates any mobile risks such as insecure d ...

  3. Oracle DBLink跨数据库访问SQL server数据同步 踩坑实录

    项目需求:这里暂且叫A公司吧,A公司有一套人事管理软件,需要与我们公司的软件做人员信息同步,A公司用的是SQL server数据库,我们公司用的Oracle,接口都不会开发(一万句"fuck ...

  4. MyBatis 一级缓存、二级缓存全详解(一)

    目录 MyBatis 一级缓存.二级缓存全详解(一) 什么是缓存 什么是MyBatis中的缓存 MyBatis 中的一级缓存 初探一级缓存 探究一级缓存是如何失效的 一级缓存原理探究 还有其他要补充的 ...

  5. Activiti6系列(4)- 三个war包的数据源及密码修改

    一.activiti-app修改数据源和密码 1.使用sublimetext工具打开tomcat,方便进行配置文件的修改. 找到被解压的war包,activiti-app/WEB-INF/classe ...

  6. 【C++】string::substr函数

    形式:s.substr(p, n) 返回一个string,包含字符串s中从p开始的n个字符的拷贝(p的默认值是0,n的默认值是s.size() - p,即不加参数会默认拷贝整个s) int main( ...

  7. MySQL-下载-安装-配置-多版本共存-设置密码-破解密码

    目录 MySQL下载安装与配置 官网下载(后面有镜像仓库下载) 从开源镜像仓库下载(快) 开源镜像仓库站点 MySQL的安装 解压 将MySQL添加至环境变量方便启动 配置MySQL 配置编码 安装M ...

  8. EventEmitter的前端实现

    EventEmitter简介 EventEmitter是Node.js的内置模块events提供的一个类,它是Node事件流的核心,EventEmitter是服务端的东西, 前端已经有event-em ...

  9. 深度搜索(dfs)+典型例题(八皇后)

    深度优先搜索简称深搜,从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”. 如上面的图所示:加入我们要找一个从V0到 ...

  10. CEF避坑指南(一)——下载并编译第一个示例

    CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...