Scarlett的三元组

有一个长度为 \(n\) 的序列 \(a_1,a_2,\cdots,a_n\),试问有多少个三元组 \((a_i,a_j,a_k)\) 满足:

  • \(1 \le i \lt j \lt k \le n\)
  • \(a_i + a_k \le a_j\)
  • \((2\le n \le 2000)\)

题解:排序 + 尺取 \(O(n^2logn)\)

  • 我们考虑\(3\)个位置中最特殊的位置\(j\)
  • 对其左右两侧进行排序,左侧降序,右侧升序 \(O(nlogn)\)
  • 然后考虑到单调性,我们利用尺取法计算答案 \(O(n)\)
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e3 + 10, M = 4e5 + 10; int n;
int a[N];
int b[N]; void solve()
{
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
int ans = 0;
for (int i = 1; i <= n; ++i)
{
for (int i = 1; i <= n; ++i)
b[i] = a[i];
sort(b + 1, b + i, greater<int>());
sort(b + i + 1, b + n + 1);
bool ishead = true;
for (int j = i - 1, k = i + 1; j >= 1; j--)
{
while (k <= n && b[j] + b[k] <= a[i] && ishead)
{
k++;
ans++;
}
if (ishead)
{
ishead = false;
k--;
continue;
}
while (k > i && b[j] + b[k] > a[i])
k--;
ans += k - i;
}
}
cout << ans << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}

韩教练发金币

韩教练有 \(n\) 枚金币,每一枚金币上都印有一个整数 \(a_i\),代表这枚金币的价值。教练现在想要给 Scarlett 、wxy977 、illume 发放金币。

这三个人都各自有着不同的想法。wxy977 希望每个人发到的金币数量相同,illume 希望每个人发到的金币的价值总和不同,而 Scarlett 希望所有的金币都被发完

韩教练希望能同时满足三个人的想法

\((1 \le n \le 10^5)\)

如果无论怎么分配金币,都不能同时满足三人的想法,请在一行内输出 No

否则,请在第一行输出 Yes,并在接下来三行内的每一行输出 \(\frac n 3\) 个整数,每个数代表一个人所发到的金币的价值

如果答案不唯一,你只需要输出任意一组满足条件的解即可。

题解:构造

  • 如果\(n\)不是\(3\)的倍数一定无解
  • 如果金币的种类只有\(1\)种也一定无解
  • 我们不妨考虑一个这样的构造:
  • 现将所有金币排序,令\(m=\frac n 3\)
  • 如果排序后\(a_1=a_{2m}\),说明第一行和第二行金币一样,我们不妨从第\(3\)行中找到一个\(x\neq a_1\)和\(a_1\)进行交换,并且需要保证交换后第三行和第一行的金币总额不同,如果相同说明无解
  • 如果排序后\(a_{m+1}=a_{3m}\),按照上述构造方法构造即可
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10; int n;
int a[N];
map<int, int> mp; void solve()
{
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
mp[a[i]]++;
}
sort(a + 1, a + n + 1);
if (n % 3 != 0 || mp.size() == 1)
{
cout << "No" << endl;
return;
}
int m = n / 3;
int pre0 = 0, pre1 = 0, pre2 = 0;
for (int i = 1; i <= m; ++i)
pre0 += a[i];
for (int i = m + 1; i <= 2 * m; ++i)
pre1 += a[i];
for (int i = 2 * m + 1; i <= 3 * m; ++i)
pre2 += a[i];
if (a[1] == a[2 * m])
{
bool flag = false;
for (int i = 2 * m + 1; i <= 3 * m; ++i)
{
if (a[i] != a[1] && pre2 - a[i] + a[1] > pre0 + a[i] - a[1])
{
swap(a[i], a[1]);
flag = true;
break;
}
}
if (!flag)
{
cout << "No" << endl;
return;
}
}
else if (a[m + 1] == a[3 * m])
{
bool flag = false;
for (int i = 1; i <= m; ++i)
{
if (a[i] != a[m + 1] && pre1 + a[i] - a[m + 1] > pre0 + a[m + 1] - a[i])
{
swap(a[i], a[m + 1]);
flag = true;
break;
}
}
if (!flag)
{
cout << "No" << endl;
return;
}
}
cout << "Yes" << endl;
for (int i = 1; i <= m; ++i)
cout << a[i] << "\n "[i < m];
for (int i = m + 1; i <= 2 * m; ++i)
cout << a[i] << "\n "[i < 2 * m];
for (int i = 2 * m + 1; i <= 3 * m; ++i)
cout << a[i] << "\n "[i < 3 * m];
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}

Beautiful Arrays

Jerry Black 有一个长度为 \(N\) 的序列 \(\{1,2,\cdots,N\}\) 和 \(M\) 个区间 \([l_1,r_1],[l_2,r_2],\cdots,[l_M,r_M]\).

现在他可以选择一个正整数 \(L\) \((L \ge K)\) 然后将序列划分成 \([1,L],[L+1,2L],\cdots,[tL+1,n]\) 这 \(t+1\) 段,其中 \(t\) 是满足 \(tL+1 \le N\) 的最大非负整数。

定义一个序列为好序列,当且仅当存在至少一种合法的分法 \([L_1,R_1],[L_2,R_2],\cdots,[L_S,R_S]\),并对于任意的 \(i \in [1,S]\),都存在 \(j \in [1,M]\),使得 \(l_j \le L_i \le R_i \le r_j\)。换言之,任何一段被划分出来的段都应被完全包含至少一个区间内。

Jerry Black 想知道他的这个序列是否是一个好序列

\(N,M,K\) \((1 \le K \le N \le 2 \times 10^5,\ 1 \le M \le 2 \times 10^5)\)

题解:调和级数 + 线段树 \(O(nlog^2n)\)

  • 容易发现如果我们枚举\(L\)从\(K\)到\(N\),发现区间总个数为调和级数\(nlogn\)
  • 那么我们只需要利用线段树维护最大值即可,支持单点修改和区间查询
  • 对于\(M\)个区间的左端点\(l_i\),我们单点修改,在其\(l_i\)处加上\(r_i\)
  • 然后对于枚举\(L\)的每个区间\([l,r]\),我们只要查询\([1,l]\)中的最大值\(mx\),如果\(mx < r\),那么该分法一定不合法
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10; int n, m, k;
struct info
{
int mx;
};
struct node
{
info val;
} seg[N << 2]; info operator+(const info &a, const info &b)
{
info c;
c.mx = max(a.mx, b.mx);
return c;
} void up(int id)
{
seg[id].val = seg[lson].val + seg[rson].val;
} void change(int id, int l, int r, int x, int val)
{
if (l == r)
{
seg[id].val.mx = max(seg[id].val.mx, val);
return;
}
int mid = l + r >> 1;
if (x <= mid)
change(lson, l, mid, x, val);
else
change(rson, mid + 1, r, x, val);
up(id);
} info query(int id, int l, int r, int ql, int qr)
{
if (ql <= l && r <= qr)
return seg[id].val;
int mid = l + r >> 1;
if (qr <= mid)
return query(lson, l, mid, ql, qr);
else if (ql > mid)
return query(rson, mid + 1, r, ql, qr);
else
return query(lson, l, mid, ql, qr) + query(rson, mid + 1, r, ql, qr);
} void solve()
{
cin >> n >> m >> k;
for (int i = 1; i <= m; ++i)
{
int l, r;
cin >> l >> r;
change(1, 1, n, l, r);
}
for (int i = k; i <= n; ++i)
{
bool flag = true;
for (int j = 1; j <= n; j += i)
{
int l = j, r = j + i - 1;
if (r > n)
r = n;
if (query(1, 1, n, 1, l).mx < r)
{
flag = false;
break;
}
}
if (flag)
{
cout << "Yes" << endl;
return;
}
}
cout << "No" << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}

时空风暴

JiangRH 迷失在了一个未知宇宙之中。

该宇宙内共有 \(n\) 个星球,分别编号为 \(1,2,3,\cdots,n\).

JiangRH 目前位于编号为 \(s\) 的星球。

已知在编号为 \(t\) 的星球上有一个逃离该未知宇宙的设备,只要 JiangRH 到达该星球,他就可以马上逃离这个宇宙。

JiangRH 希望可以尽快离开这该死的未知宇宙。

逃离的路途通常是困难的,并非任意两个星球之间都可以安全地直接通行。JiangRH 只知道若干条安全的路线,以及通过每一条路线所需要花费的时间。

在逃离的过程中,JiangRH 发现在不久的将来会发生多次时空风暴,且每次时空风暴出现的时间互不相同。每次遇到时空风暴,JiangRH 都会被传送到某个指定的星球上,除非在这次时空风暴发生之前他已经逃离了这个宇宙。当然,如果在某次时空风暴发生的同时 JiangRH 刚好到达编号为 \(t\) 的星球,我们认为他能够以极快的速度成功逃离,并不会受到该次时空风暴的影响。

请问 JiangRH 最早能在什么时候离开这个未知宇宙?

题解:反向\(dij\)

  • 因为不管怎么传送,我们都必须前往编号\(t\)的星球
  • 所以我们可以将编号\(t\)星球当作源点进行\(dij\)
  • 然后将时空风暴出现的时间进行排序后,对于每一个传送之间的时间间隔看能否到达编号\(t\)即可
  • 如果传送到了最后一个星球,但是最后星球到不了编号\(t\)的星球,说明一定无解
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10; int n, m, s, t, k;
vector<pii> g[N];
int dis[N];
bool vis[N];
pii qry[N]; void dij(int st)
{
for (int i = 1; i <= n; ++i)
dis[i] = INF;
priority_queue<pii, vector<pii>, greater<pii>> q;
dis[st] = 0;
q.push({dis[st], st});
while (q.size())
{
int u = q.top().second;
q.pop();
if (vis[u])
continue;
for (auto [v, w] : g[u])
{
if (dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
q.push({dis[v], v});
}
}
}
} void solve()
{
cin >> n >> m >> s >> t;
for (int i = 1, u, v, w; i <= m; ++i)
{
cin >> u >> v >> w;
if (u == v)
continue;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
dij(t);
cin >> k;
for (int i = 1; i <= k; ++i)
cin >> qry[i].first >> qry[i].second;
qry[++k] = {0, s};
sort(qry + 1, qry + k + 1);
int ans = 0;
for (int i = 1; i < k; ++i)
{
int ed = qry[i].second;
int d = qry[i + 1].first - qry[i].first;
if (dis[ed] <= d)
{
ans += dis[ed];
cout << ans << endl;
return;
}
ans += d;
}
if (dis[qry[k].second] != INF)
{
ans += dis[qry[k].second];
cout << ans << endl;
return;
}
cout << "JiangRH is not needed anymore" << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
// cin >> T;
while (T--)
{
solve();
}
return 0;
}

有个大坏蛋但我不说是谁

一年一度的小军训来咯!某班共 \(n\) 名同学正在树荫下坐成一排休息,位置从左到右分别编号为 \(1,2,\cdots,n\),你坐在第 \(p\) 个位置。

班主任发现这群小宝贝们都快被太阳晒成干了,于是赶忙去买了 \(m\) 个单位的水,让你给大家分发下去。而你,作为这个班的班长,却在想着如何能让自己分到更多的水!(太坏啦!)

因为大家正坐成一排,我们假设每个人只能看到自己以及与自己相邻的同学分到了多少个单位的水。只要相邻的同学之间分配到的水的差值不超过 \(d\) 个单位,大家是不会抱怨班长分配不均的。

已知每位同学至少应当分配到 \(1\) 个单位的水,请问在大家都不会抱怨分配不均的前提下,你最多能够分给自己多少个单位的水?

题解:二分答案 + 模拟

  • 二分答案即可
  • 在\(check\)时模拟过程并利用等差数列求和即可
#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10, M = 4e5 + 10; int n, m, d, p; bool check(int mid)
{
int res = 0;
int k = mid / d;
if (mid % d == 0)
k--;
k = max(1LL, p - k);
res += ((p - k + 1) * (mid - (p - k) * d + mid)) / 2;
if (k > 1)
res += k - 1;
k = mid / d;
if (mid % d == 0)
k--;
k = min(n, p + k);
res += ((k - p + 1) * (mid - (k - p) * d + mid)) / 2;
if (k < n)
res += n - k;
res -= mid;
if (res <= m)
return true;
else
return false;
} void solve()
{
cin >> n >> m >> d >> p;
int l = 1, r = m;
while (l <= r)
{
int mid = l + r >> 1;
if (check(mid))
l = mid + 1;
else
r = mid - 1;
}
cout << r << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}

千万玩家的枪战梦想

知名线下真人枪战赛事 Counter Fire World Final 目前正在下北泽举行。

所有参赛选手会在一张无限大小的网格图内进行比赛,但初始时的位置会落在一个大小为 \(n \times m\) 的矩形区域内,并且每个位置一开始最多只会有一位选手存在。

赛内共设置了 \(26\) 个阵营,以 \(\text{A},\text{B},\cdots,\text{Z}\) 进行标识。每位选手在比赛开始前会被随机分配到一个阵营中。

作为本场赛事的主办方,你需要在比赛开始时对场上局势进行解说。你打算按照以下方案判断局势走向:

  • 对每位选手单独进行判断,并假定除了该选手以外,其它选手所处的位置并不会发生变化;
  • 当前选手每次只能够选择走到相邻的四个网格(上、下、左、右)中的任意一个;
  • 如果下一个网格为空位置,或者存在的选手归属于己方阵营,那么当前选手便可以走到该网格内;
  • 如果当前选手被非己方阵营的其它选手所包围(即能够行走的网格总数有限),便认定该选手一定会在未来的某一时刻被淘汰,否则认为该选手有可能存活到最后。

试判断在所有出现过的阵营中,有哪些阵营到最后可能还会有至少一名选手未被淘汰,又有哪些阵营会被完全淘汰?

\((3 \le n,m \le 1000)\)

题解:BFS/DFS \(O(26nm)\)

对\(26\)个字母分别进行\(bfs\)即可

#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define rson id << 1 | 1
#define lson id << 1
#define int long long
#define mpk make_pair
#define endl '\n'
using namespace std;
typedef unsigned long long ULL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 1e3 + 10, M = 4e5 + 10; int n, m;
char g[N][N];
bool vis[N][N];
unordered_map<char, bool> mp;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; struct node
{
int x, y;
}; bool bfs(char type)
{ queue<node> q;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
{
if (g[i][j] == type)
{
q.push({i, j});
vis[i][j] = true;
}
else
vis[i][j] = false;
}
while (q.size())
{
node u = q.front();
q.pop();
if (u.x == 1 || u.x == n || u.y == 1 || u.y == m)
return true;
for (int i = 0; i < 4; ++i)
{
int nx = u.x + dir[i][0];
int ny = u.y + dir[i][1];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny] && (g[nx][ny] == '.' || g[nx][ny] == type))
{
vis[nx][ny] = 1;
q.push({nx, ny});
}
}
}
return false;
} void solve()
{
cin >> n >> m;
mp.clear();
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
{
cin >> g[i][j];
mp[g[i][j]] = true;
}
vector<char> win, lose;
for (int i = 0; i < 26; ++i)
{
if (!mp[(char)('A' + i)])
continue;
if (bfs((char)('A' + i)))
win.push_back((char)('A' + i));
else
lose.push_back((char)('A' + i));
}
if (win.size())
{
for (auto ch : win)
cout << ch;
}
else
cout << "-";
cout << " / ";
if (lose.size())
{
for (auto ch : lose)
cout << ch;
}
else
cout << "-";
cout << endl;
}
signed main(void)
{
Zeoy;
int T = 1;
cin >> T;
while (T--)
{
solve();
}
return 0;
}

2023-05 多校联合训练 ZJNU站 正式赛的更多相关文章

  1. 2017多校联合训练2—HDU6054--Is Derek lying?(思维题)

    Is Derek lying? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  2. NFLSOJ 1072 - 【2021 六校联合训练 NOIP #1】异或(FWT+插值)

    题面传送门 一道非常不错的 FWT+插值的题 %%%%%%%%%%%% 还是那句话,反正非六校的看不到题对吧((( 方便起见在下文中设 \(n=2^d\). 首先很明显的一点是这题涉及两个维度:异或和 ...

  3. NFLSOJ 1060 - 【2021 六校联合训练 NOI #40】白玉楼今天的饭(子集 ln)

    由于 NFLSOJ 题面上啥也没有就把题意贴这儿了( 没事儿,反正是上赛季的题,你们非六校学生看了就看了,况且看了你们也没地方交就是了 题意: 给你一张 \(n\) 个点 \(m\) 条边的图 \(G ...

  4. 2016多校联合训练4 F - Substring 后缀数组

    Description ?? is practicing his program skill, and now he is given a string, he has to calculate th ...

  5. 2014 多校联合训练赛6 Fighting the Landlords

    本场比赛的三个水题之一,题意是两个玩家每人都持有一手牌,问第一个玩家是否有一种出牌方法使得在第一回和对方无牌可出.直接模拟即可,注意一次出完的情况,一开始没主意,wa了一发. #include< ...

  6. 2016多校联合训练contest4 1012Bubble Sort

    Bubble Sort Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  7. hdu 4649 Professor Tian 多校联合训练的题

    这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作  即  或 ,与 ,和异或 |   &  ^ )这样依次把操作符插入整 ...

  8. HDU OJ 5317 RGCDQ( 2015多校联合训练第3场) 暴力打表+小技巧

    题目连接:Click here 题意:在一个[L,R]内找到最大的gcd(f[i],f[j])其中L<=i<j<=R,f[x]表示i分解质因数后因子的种类数.eg:f[10]=2(1 ...

  9. HDU OJ 5326 Work( 2015多校联合训练第3场) 并查集

    题目连接:戳ME #include <iostream> #include <cstdio> #include <cstring> using namespace ...

  10. HDU 4643 GSM 暑期多校联合训练第五场 1001

    点击打开链接 我就不说官方题解有多坑了 V图那么高端的玩意儿 被精度坑粗翔了 AC前 AC后 简直不敢相信 只能怪自己没注意题目For the distance d1 and d2, if fabs( ...

随机推荐

  1. 深入理解c语言指针与内存

    一.将int强制转换为int指针,将int指针强转换为int void f(void) { int *p = (int*)100; //将int强制转换为int指针 printf("%d\n ...

  2. 画流程图、状态图、时序图、甘特图的JS库-mermaid-js

    参考地址:https://github.com/mermaid-js/mermaid 原生使用方式: <!DOCTYPE html> <html> <head> & ...

  3. DOM & BOM – Input File, Drag & Drop File, File Reader, Blob, ArrayBuffer, File, UTF-8 Encode/Decode, Download File

    前言 之前写过 2 篇关于读写文件和二进制相关的文章 Bit, Byte, ASCII, Unicode, UTF, Base64 和 ASP.NET Core – Byte, Stream, Dir ...

  4. Facebook – Reviews (Graph API)

    前言 企业网站经常需要放 customer reviews 来增加 conversion. 常见的 Reviews 平台有 Facebook Reviews 和 Google Reviews. 这篇, ...

  5. TypeScript – Get Started

    前言 我学 TypeScript 的时候是 Angular 2.0 beta 的年代... 现在 Angular 都快 14 了. 但由于已经有 1 年半没有写 Angular 和 TypeScrip ...

  6. SURF (Speeded Up Robust Features,加速稳健特征)

    本篇文章来自wikipedia,如果需要阅读英文,可以去看一下. SURF (Speeded Up Robust Features, 加速稳健特征) 是一个稳健的图像识别和描述算法,首先于2006年发 ...

  7. 105份墨天轮“国产化迁移”干货文档汇总(含TiDB、openGauss、上云等)

    当前国产数据库产品百花齐放,随着政策的推进.技术的迭代以及市场需求的逐步扩大,数据库国产化正在加速进行中,有越来越多的金融.通信.制造.互联网等企业机构以及政府机关单位将业务系统从Oracle.MyS ...

  8. iOS通知使用小结

    最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...

  9. 2024 年 04 月编程语言排行榜,PHP 排名创新低?

    ​ 编程语言的流行度总是变化莫测,每个月的排行榜都揭示着新的趋势.2024年4月的编程语言排行榜揭示了一个引人关注的现象:PHP的排名再次下滑,创下了历史新低.这种变化对于PHP开发者和整个技术社区来 ...

  10. 大数据技术之Shell

    1. shell概述 示意图: Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ● L ...