CCPC-Wannafly Winter Camp Day5 (Div2, onsite)
Replay:
Dup4:
- 时间复杂度算不对? 一点点思路不经过验证就激动的要死? 浪费自己一个小时还浪费别人一个小时?
- 对1e3不敏感? 1e3 * 1e3是多少? 模拟建边跑dp不写非要写个大模拟?
- 看到数据结构就高兴的要死? 没细想? 没发现性质?
X:
- 日常语文差, 导致计算几何死都写不对 读题要细致啊!
- 感觉状态还可以?只是计算几何写太久了, 人都懵了
A:Cactus Draw
Solved.
按照BFS序以及深度排
#include<bits/stdc++.h> using namespace std; const int maxn = 1e4 + ; struct Edge{
int to, nxt;
Edge(){}
Edge(int to, int nxt) :to(to), nxt(nxt){}
}edge[maxn << ]; struct node{
int x, y;
node(){}
node(int x, int y):x(x), y(y){}
}ans[maxn]; int n, m;
int head[maxn], tot;
int vis[maxn];
int level[maxn]; void Init()
{
tot = ;
memset(vis, , sizeof vis);
memset(level, , sizeof level);
memset(head, -, sizeof head);
} void addedge(int u,int v)
{
edge[tot] = Edge(v, head[u]); head[u] = tot++;
edge[tot] = Edge(u, head[v]); head[v] = tot++;
} void BFS(int root)
{
queue<int>q;
q.push(root);
vis[root] = ;
ans[root] = node(vis[root], ++level[vis[root]]);
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = head[u]; ~i; i = edge[i].nxt)
{
int v = edge[i].to;
if(!vis[v])
{
vis[v] = vis[u] + ;
ans[v] = node(vis[v], ++level[vis[v]]);
q.push(v);
}
}
}
} int main()
{
while(~scanf("%d %d", &n, &m))
{
Init();
for(int i = , u, v; i <= m; ++i)
{
scanf("%d %d", &u, &v);
addedge(u, v);
}
BFS();
for(int i= ; i <= n; ++i)
{
printf("%d %d\n", ans[i].x, ans[i].y);
}
}
return ;
}
C:Division
Solved.
每次取最大进行操作,堆维护
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 100010
int n, k; int main()
{
while (scanf("%d%d", &n, &k) != EOF)
{
priority_queue <int> pq;
ll res = ;
for (int i = , a; i <= n; ++i)
{
scanf("%d", &a);
pq.push(a);
}
for (int i = ; i <= k; ++i)
{
int top = pq.top(); pq.pop();
pq.push(top / );
}
while (!pq.empty())
{
res += pq.top();
pq.pop();
}
printf("%lld\n", res);
}
return ;
}
D:doppelblock
unsolved.
搜索。
增加剪枝:当剩余的数字小于x之间的数字时,回溯掉即可。
还有一条剪枝可以先处理x的位置在填数字(未写)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 1e9 + ; const int maxn = 1e2 + ; int n;
int sum = ;
int r[maxn], c[maxn];
int left_r[maxn], left_c[maxn];
int mid_r[maxn], mid_c[maxn];
int right_r[maxn], right_c[maxn];
int cnt_r[maxn], cnt_c[maxn];
int vis_r[maxn][maxn], vis_c[maxn][maxn];
char mp[maxn][maxn]; void Init()
{
memset(left_r, , sizeof left_r);
memset(left_c, , sizeof left_c); memset(mid_r, , sizeof mid_r);
memset(mid_c, , sizeof mid_c); memset(right_r, , sizeof right_r);
memset(right_c, , sizeof right_c); memset(cnt_r, , sizeof cnt_r);
memset(cnt_c, , sizeof cnt_c); memset(vis_r, , sizeof vis_r);
memset(vis_c, , sizeof vis_c);
} bool DFS(int x, int y)
{
if (x == n && y == n + ) return true;
if (y == n + )
{
if (cnt_r[x] != ) return false;
else return DFS(x + , );
} if (cnt_r[x] == && cnt_c[y] == )
{
mp[x][y] = 'X';
cnt_r[x]++;
cnt_c[y]++;
if (DFS(x, y + )) return true;
cnt_r[x]--;
cnt_c[y]--;
} if (cnt_r[x] == && (cnt_c[y] == && mid_c[y] == c[y]))
{
mp[x][y] = 'X';
cnt_r[x]++;
cnt_c[y]++;
if (DFS(x, y + )) return true;
cnt_r[x]--;
cnt_c[y]--;
} if (cnt_c[y] == && (cnt_r[x] == && mid_r[x] == r[x]))
{
mp[x][y] = 'X';
cnt_r[x]++;
cnt_c[y]++;
if (DFS(x, y + )) return true;
cnt_r[x]--;
cnt_c[y]--;
} if ((cnt_r[x] == && mid_r[x] == r[x]) && (cnt_c[y] == && mid_c[y] == c[y]))
{
mp[x][y] = 'X';
cnt_r[x]++;
cnt_c[y]++;
if (DFS(x, y + )) return true;
cnt_r[x]--;
cnt_c[y]--;
} for (int i = ; i <= n - ; ++i)
{
if (vis_r[x][i] || vis_c[y][i]) continue;
if (cnt_r[x] == )
{
if (sum - (left_r[x] + i) < r[x]) continue;
}
else if (cnt_r[x] == )
{
if (mid_r[x] + i > r[x]) continue;
} if (cnt_c[y] == )
{
if (sum - (left_c[y] + i) < c[y]) continue;
}
else if (cnt_c[y] == )
{
if (mid_c[y] + i > c[y]) continue;
} if (cnt_r[x] == ) left_r[x] += i;
else if (cnt_r[x] == ) mid_r[x] += i;
else if (cnt_r[x] == ) right_r[x] += i; if (cnt_c[y] == ) left_c[y] += i;
else if (cnt_c[y] == ) mid_c[y] += i;
else if (cnt_c[y] == ) right_c[y] += i; vis_r[x][i]++;
vis_c[y][i]++; mp[x][y] = i + '';
if (DFS(x, y + )) return true; if (cnt_r[x] == ) left_r[x] -= i;
else if (cnt_r[x] == ) mid_r[x] -= i;
else if (cnt_r[x] == ) right_r[x] -= i; if (cnt_c[y] == ) left_c[y] -= i;
else if (cnt_c[y] == ) mid_c[y] -= i;
else if (cnt_c[y] == ) right_c[y] -= i; vis_r[x][i]--;
vis_c[y][i]--;
} return false;
} void RUN()
{
int t;
int flag = ;
scanf("%d", &t);
while (t--)
{
if (flag++) printf("\n");
Init();
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", r + i);
for (int i = ; i <= n; ++i) scanf("%d", c + i);
sum = (n - ) * (n - ) / ;
DFS(, );
for (int i = ; i <= n; ++i)
{
for (int j = ; j <= n; ++j)
{
printf("%c", mp[i][j]);
}
puts("");
}
}
} int main()
{
#ifdef LOCAL_JUDGE
freopen("Text.txt", "r", stdin);
#endif // LOCAL_JUDGE RUN(); #ifdef LOCAL_JUDGE
fclose(stdin);
#endif // LOCAL_JUDGE
return ;
}
E:Fast Kronecker Transform
Upsolved.
将同样的数放在一起,如果同样的数字小于$10000,直接暴力$
否则做NTT
$因为模数是998244353,可以直接做,做FFT可能有精度问题$
$F(n) = \sum f(t) \cdot g(n - t)$
$f(t) = t 当 a_t = x$
$g(t) = t 当 b_t = x$
#include <bits/stdc++.h>
using namespace std; #define db long double
#define ll long long
#define N 400010
#define S 10010
const ll MOD = (ll);
int n, m, a[N], b[N], c[N];
vector <int> l[N], r[N];
ll ans[N]; void Hash()
{
c[] = ;
for (int i = ; i <= n; ++i) c[++c[]] = a[i];
for (int i = ; i <= m; ++i) c[++c[]] = b[i];
sort(c + , c + + c[]);
c[] = unique(c + , c + + c[]) - c - ;
for (int i = ; i <= n; ++i) a[i] = lower_bound(c + , c + + c[], a[i]) - c;
for (int i = ; i <= m; ++i) b[i] = lower_bound(c + , c + + c[], b[i]) - c;
} ll qmod(ll base, ll n)
{
ll res = ;
while (n)
{
if (n & ) res = (res * base) % MOD;
base = base * base % MOD;
n >>= ;
}
return res;
} int x1[N], x2[N];
void ntt(int *a, int len, int f)
{
int i, j = , t, k;
for (int i = ; i < len - ; ++i)
{
for (t = len; j ^= t >>= , ~j & t;);
if (i < j) swap(a[i], a[j]);
}
for (int i = ; i < len; i <<= )
{
t = i << ;
int wn = qmod(, (MOD - ) / t);
for (int j = ; j < len; j += t)
{
int w = ;
for (k = ; k < i; ++k, w = 1ll * w * wn % MOD)
{
int x = a[j + k], y = 1ll * w * a[j + k + i] % MOD;
a[j + k] = (x + y) % MOD, a[j + k + i] = (x - y + MOD) % MOD;
}
}
}
if (f == -)
{
reverse(a + , a + len);
int inv = qmod(len, MOD - );
for (int i = ; i < len; ++i) a[i] = 1ll * a[i] * inv % MOD;
}
} int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", a + i);
for (int i = ; i <= m; ++i) scanf("%d", b + i); Hash();
for (int i = ; i <= n; ++i) l[a[i]].push_back(i);
for (int i = ; i <= m; ++i) r[b[i]].push_back(i);
int len1 = n + , len2 = m + , len = ;
while (len < (len1 + len2)) len <<= ;
memset(ans, , sizeof ans);
for (int i = ; i <= n + m + ; ++i)
{
if (l[i].size() + r[i].size() < S)
{
for (auto u : l[i]) for (auto v : r[i])
ans[u + v] = (ans[u + v] + (1ll * u * v) % MOD) % MOD;
}
else
{
for (int j = ; j < len; ++j) x1[j] = ;
for (int j = ; j < len; ++j) x2[j] = ;
for (auto x : l[i]) x1[x] = x;
for (auto x : r[i]) x2[x] = x;
ntt(x1, len, );
ntt(x2, len, );
for (int j = ; j < len; ++j)
x1[j] = 1ll * x1[j] * x2[j] % MOD;
ntt(x1, len, -);
for (int j = ; j <= n + m; ++j)
ans[j] = (ans[j] + x1[j]) % MOD;
}
}
for (int i = ; i <= n + m; ++i) printf("%lld%c", ans[i] % MOD, " \n"[i == n + m]);
}
return ;
}
F:Kropki
Solved.
习惯性记忆化搜索(实际上是个状压dp)
$dp[S][i]表示S状态下i作为最后一个出现的状态, dp下去即可$
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 1e9 + ; int n;
ll dp[ << ][];
char str[]; ll DFS(int S, int last, int dep)
{
if(dep == n)
{
return 1ll;
}
if(dp[S][last] != -) return dp[S][last];
ll res = ;
for(int i = ; i <= n; ++i)
{
if(S & ( << (i - ))) continue;
if(dep)
{
if(str[dep] == '')
{
if(i != last * && i * != last) continue;
}
if(str[dep] == '')
{
if(i == last * || i * == last) continue;
}
}
ll tmp = DFS((S | ( << (i - ))), i, dep + );
res = (res + tmp) % MOD;
}
dp[S][last] = res;
return res;
} int main()
{
while(~scanf("%d", &n))
{
scanf("%s", str + );
memset(dp, -, sizeof dp);
ll ans = DFS(, , );
printf("%lld\n", ans);
}
return ;
}
H:Nested Tree
Solved.
点数只有$10^6,建边树形DP$
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = (ll)1e9 + ;
const int maxn = 1e6 + ; struct Edge{
int to, nxt;
Edge(){}
Edge(int to, int nxt):to(to), nxt(nxt){}
}edge[maxn << ]; int n, m;
int head[maxn], tot;
ll son[maxn];
ll ans; void Init()
{
ans = ;
tot = ;
memset(head, -, sizeof head);
} void addedge(int u,int v)
{
edge[tot] = Edge(v, head[u]); head[u] = tot++;
edge[tot] = Edge(u, head[v]); head[v] = tot++;
} void DFS(int u, int fa)
{
son[u] = ;
for(int i = head[u]; ~i; i = edge[i].nxt)
{
int v = edge[i].to;
if(v == fa) continue;
DFS(v, u);
son[u] += son[v];
ans = (ans + (son[v] * (n - son[v]) % MOD) % MOD) % MOD;
}
} int main()
{
while(~scanf("%d %d", &n, &m))
{
Init();
for(int i = , u, v; i < n; ++i)
{
scanf("%d %d", &u, &v);
for(int j = ; j <= m; ++j)
{
addedge((j - ) * n + u, (j - ) * n + v);
}
}
for(int i = , a, b, u, v; i < m; ++i)
{
scanf("%d %d %d %d", &a ,&b, &u, &v);
addedge((a - ) * n + u, (b - ) * n + v);
}
n *= m;
DFS(, -);
printf("%lld\n", ans);
}
return ;
}
I:Sorting
Upsolved.
将数分为两类,一类是$<= x, 二类是> x $
同一类的数在怎么操作其相对位置都是不变的
那么我们只需要知道前缀区间内有多少个一类数,有多少个二类数
再用前缀和维护同一类数的和即可
$2、3操作用线段树维护即可,用0, 1分别表示一类数$
每次操作相当于将前面连续一段赋值为$0/1 后面连续一段赋值为1/0$
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 200010
int n, q, x, a[N];
ll sum[][N]; namespace SEG
{
int lazy[N << ], v[N << ];
void pushdown(int id, int l, int r, int mid)
{
if (lazy[id] == -) return;
lazy[id << ] = lazy[id];
lazy[id << | ] = lazy[id];
v[id << ] = lazy[id] * (mid - l + );
v[id << | ] = lazy[id] * (r - mid);
lazy[id] = -;
}
void pushup(int id) { v[id] = v[id << ] + v[id << | ]; }
void build(int id, int l, int r)
{
lazy[id] = -, v[id] = ;
if (l == r)
{
v[id] = a[l] > x;
return;
}
int mid = (l + r) >> ;
build(id << , l, mid);
build(id << | , mid + , r);
pushup(id);
}
void update(int id, int l, int r, int ql, int qr, int val)
{
if (l >= ql && r <= qr)
{
lazy[id] = val;
v[id] = val * (r - l + );
return;
}
int mid = (l + r) >> ;
pushdown(id, l, r, mid);
if (ql <= mid) update(id << , l, mid, ql, qr, val);
if (qr > mid) update(id << | , mid + , r, ql, qr, val);
pushup(id);
}
int query(int id, int l, int r, int ql, int qr)
{
if (r < l) return ;
if (l >= ql && r <= qr) return v[id];
int mid = (l + r) >> ;
pushdown(id, l, r, mid);
int res = ;
if (ql <= mid) res += query(id << , l, mid, ql, qr);
if (qr > mid) res += query(id << | , mid + , r, ql, qr);
return res;
}
} ll que(int r)
{
if (r < ) return ;
int a = SEG::query(, , n, , r);
int b = r - a;
//cout << a << " " << b << endl;
//cout << sum[1][a] << " " << sum[0][b] << endl;
return (a ? sum[][a] : ) + (b ? sum[][b] : );
} int main()
{
while (scanf("%d%d%d", &n, &q, &x) != EOF)
{
sum[][] = , sum[][] = ;
for (int i = ; i <= n; ++i)
{
scanf("%d", a + i);
if (a[i] <= x) sum[][++sum[][]] = a[i];
else sum[][++sum[][]] = a[i];
}
for (int i = ; i <= n; ++i) for (int j = ; j < ; ++j) sum[j][i] += sum[j][i - ];
SEG::build(, , n);
for (int qq = , op, l, r; qq <= q; ++qq)
{
scanf("%d%d%d", &op, &l, &r);
if (op == ) printf("%lld\n", que(r) - que(l - ));
else if (op == )
{
int a = SEG::query(, , n, l, r);
int b = (r - l + ) - a;
SEG::update(, , n, l, l + b - , );
SEG::update(, , n, l + b, r, );
}
else
{
int a = SEG::query(, , n, l, r);
int b = (r - l + ) - a;
SEG::update(, , n, l, l + a - , );
SEG::update(, , n, l + a, r, );
}
}
}
return ;
}
J:Special Judge
Solved.
$枚举每两条边, 判一下即可$
#include<bits/stdc++.h> using namespace std; const double eps = 1e-;
const int maxn = 1e4 + ; int sgn(__int128 x)
{
if(x == ) return ;
else return x > ? : -;
} struct Point{
__int128 x, y;
Point(){}
Point(__int128 _x, __int128 _y)
{
x = _x;
y = _y;
} bool operator == (const Point &b) const
{
return sgn(x - b.x) == && sgn(y - b.y) == ;
} bool operator < (const Point &b) const
{
return sgn(x - b.x) == ? sgn(y - b.y) : sgn(x - b.x);
} Point operator - (const Point &b) const
{
return Point(x - b.x, y - b.y);
} __int128 operator ^ (const Point &b) const
{
return x * b.y - y * b.x;
} __int128 operator * (const Point &b) const
{
return x * b.x + y * b.y;
} }P[maxn]; struct Line{
Point s, e;
Line(){}
Line(Point _s, Point _e)
{
s = _s;
e = _e;
} void adjust()
{
if(e < s) swap(s, e);
} int segcrossseg(Line v)
{
int d1 = sgn((e - s) ^ (v.s - s));
int d2 = sgn((e - s) ^ (v.e - s));
int d3 = sgn((v.e - v.s) ^ (s - v.s));
int d4 = sgn((v.e - v.s) ^ (e - v.s));
if((d1 ^ d2) == - && (d3 ^ d4) == -) return ;
return (d1 == && sgn((v.s - s) * (v.s - e)) <= )
|| (d2 == && sgn((v.e - s) * (v.e - e)) <= )
|| (d3 == && sgn((s - v.s) * (s - v.e)) <= )
|| (d4 == && sgn((e - v.s) * (e - v.e)) <= );
} bool pointtoseg(Point p)
{
return sgn((p - s) ^ (e - s)) == && sgn((p - s) * (p - e)) <= ;
}
}L[maxn]; int n, m;
int u[maxn], v[maxn]; int main()
{
while(~scanf("%d %d", &n, &m))
{
for(int i = ; i <= m; ++i) scanf("%d %d", u + i, v + i);
for(int i = ; i <= n; ++i)
{
int x, y;
scanf("%d %d", &x ,&y);
P[i] = Point(x, y);
}
for(int i = ; i <= m; ++i)
{
L[i] = Line(P[u[i]], P[v[i]]);
L[i].adjust();
}
int ans = ;
for(int i = ; i <= m; ++i) for(int j = i + ; j <= m; ++j)
{
if(L[i].segcrossseg(L[j]) == ) ans++;
else if(L[i].segcrossseg(L[j]) == )
{
if(u[i] == u[j])
{
if(!(L[i].pointtoseg(P[v[j]]) || (L[j].pointtoseg(P[v[i]])))) continue;
} if(u[i] == v[j])
{
if(!(L[i].pointtoseg(P[u[j]]) || (L[j].pointtoseg(P[v[i]])))) continue;
} if(v[i] == u[j])
{
if(!(L[i].pointtoseg(P[v[j]]) || (L[j].pointtoseg(P[u[i]])))) continue;
} if(v[i] == v[j])
{
if(!(L[i].pointtoseg(P[u[j]]) || (L[j].pointtoseg(P[u[i]])))) continue;
} ans++;
}
}
printf("%d\n", ans);
}
return ;
}
CCPC-Wannafly Winter Camp Day5 (Div2, onsite)的更多相关文章
- CCPC-Wannafly Winter Camp Day5 (Div2, onsite) Sorting(线段树)
题目链接 题意 对序列进行三种操作: 1.区间求和. 2.将区间小于等于$x$的数不改变相对顺序的前提下放到$x$左边,用同样规则将比$x$大的放到右边. 3.将区间大于$x$的数不改变相对顺序的前提 ...
- 2019 CCPC-Wannafly Winter Camp Day5(Div2, onsite)
solve 5/11 补题:7/11 A Cactus Draw Code:zz Thinking :zz 题意:要在n*n的网格内画上一棵节点数为n树,使得没有边相交. 很好想的构造题,因为网格有n ...
- 2020 CCPC Wannafly Winter Camp Day1 C. 染色图
2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...
- CCPC Wannafly Winter Camp Div2 部分题解
Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...
- CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
咕咕咕. camp补题. 传送门:https://www.zhixincode.com/contest/29/problems A.Aqours 题意:有一棵有根树,根节点为1,给出每个结点的父 ...
- CCPC-Wannafly Winter Camp Day3 (Div2, onsite)
Replay Dup4: 没想清楚就动手写? 写了两百行发现没用?想的还是不够仔细啊. 要有莽一莽的精神 X: 感觉今天没啥输出啊, 就推了个公式?抄了个板子, 然后就一直自闭A. 语文差,题目没理解 ...
- 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)
solve:4/11 补题:6/11 A 机器人 补题:zz 这是一道分类讨论的题目,有一个规律就是如果必须要从第一个区到第二个区,那么最多转区两次(1到2一次,2到1一次),然后分类讨论即可,只要细 ...
- 2019 CCPC-Wannafly Winter Camp Day7(Div2, onsite)
solve 6/11 补题: A.迷宫 Code:zz Thinking:zz kk 把每个节点的深度都处理出来,同一深度的点的冲突度为 (x-1),x为同层次点数减一. 然后冲突度不断下传(冲突度为 ...
- Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门 Portal 原题目描述在最下面. 简单的 ...
随机推荐
- GIS-ArcGIS JS API FeatureLayer图层绑定事件的几种方式
一.以下四种方式均可以 importantProvinceLayer.on("click", DoIdentify); dojo.connect(importantProvince ...
- python2.0_s12_day11_SqlAlchemy使用介绍
SqlAlchemy ORM ORM的解释; 简单点:对象关系映射. 需求:我们写一个主机管理,把主机信息存在数据库,一开始我们编程不熟练的时候,执行命令时候要调用数据库,会把相应的SQL语句写到代码 ...
- org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException)
在运行hadoop的程序时,向hdfs中写文件时候,抛出异常信息如下: Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hado ...
- 【RF库Collections测试】Dictionary Should Contain Sub Dictionary
Name:Dictionary Should Contain Sub DictionarySource:Collections <test library>Arguments:[ dict ...
- 数组内Merge
数组al[0...mid-1]和al[mid...num-1]两个部分都已经分别排好序.要求合并使得整个数组al有序.请给出合并merge的代码.要求空间复杂度为O(1). /* 数组a[begin, ...
- Unity读取 JSon配置文件
一.记录 只是记录,现在在项目中删除掉了.先保留下来,以飨来着!!当然有包括自己. 二.读取配置的代码 简单粗暴 [ExecuteInEditMode] public class Config : M ...
- <转>E-M算法
转自http://blog.csdn.net/zouxy09/article/details/8537620/ 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊, ...
- Linux命令行常用光标移动快捷键
Linux 命令行快捷键 涉及在Linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词之间跳转 ct ...
- SSH电力项目四-显示首页
1.登录页面: 将上一节中的页面放到/WEB-INF/page/目录下,需要登录后才能访问该页面: 对应页面:/WEB-INF/page/menu/home.jsp <%@ page langu ...
- java网络编程面试题
1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当 ...