比赛链接


前言

第二场都快打了才补完题目发博客,最近事情真的太多了= =

A - Intelligent Warehouse(DP+数论优化),三种做法

题目大意

给出 n n n个数,从中选择最多的数使得选出的集合任何两个数都是倍数关系。

解题思路

任何两个数都是倍数关系也就是说,从第一个数开始,后面的数都是前一个数的倍数即可。显然相同的数贡献就是其数量。那么就是一个简单的 D P DP DP。

做法一:枚举倍数

这题真的无语,一开始就想到了离散化数组然后从小到大(或者从大到小)枚举每个数的倍数,赛时TLE到见鬼,赛后一发过。

//
// Created by Happig on 2020/10/25
//
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define ENDL "\n"
#define lowbit(x) (x&(-x))
#define mkp(x, y) make_pair(x,y)
#define mem(a, x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 1e7 + 10;
const int maxm = 2e5 + 10;int a[maxm], num[maxn];
int d[maxn];int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);//ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;scanf("%d", &n);
//    clock_t beg = clock();int Max = 0;for (int i = 0; i < n; i++) {scanf("%d", &a[i]);//a[i] = i + 1;num[a[i]]++;Max = max(Max, a[i]);}sort(a, a + n);int m = unique(a, a + n) - a;for (int i = m - 1; i >= 0; i--) {d[a[i]] = num[a[i]];int res = 0;for (int j = 2 * a[i]; j <= Max; j += a[i]) {if (num[j]) res = max(res, d[j]);}d[a[i]] += res;//cout << d[a[i]] << endl;}int ans = 0;for (int i = 0; i < m; i++) {ans = max(ans, d[a[i]]);}printf("%d\n", ans);
//    clock_t ed = clock();
//    cout << ed - beg << endl;return 0;
}

做法二:枚举范围内所有数的素数倍

据说这是题解给出的做法,因为所有数的范围只有 1 e 7 1e7 1e7,那么我们枚举所有的数,只向其素数倍转移即可,时间复杂度我不会证明,据说是 O ( w log ⁡ log ⁡ w ) O(w \log \log w) O(wloglogw)。

//
// Created by Happig on 2020/10/25
//
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define ENDL "\n"
#define lowbit(x) (x&(-x))
#define mkp(x, y) make_pair(x,y)
#define mem(a, x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 1e7 + 10;
const int maxm = 2e5 + 10;int prime[maxn / 2];
bitset<maxn> vis;
int cnt;void euler() {cnt = 0;vis.reset();for (int i = 2; i < maxn; i++) {if (!vis[i]) prime[++cnt] = i;for (int j = 1; j <= cnt && 1LL * i * prime[j] < maxn; j++) {vis[i * prime[j]] = 1;if (i % prime[j] == 0) break;}}
}int d[maxn], num[maxn];int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);//ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);euler();int n, Max = 0;scanf("%d", &n);for (int i = 0, x; i < n; i++) {scanf("%d", &x);++num[x], Max = max(Max, x);}int ans = 0, N = 1e7;for (int i = 1; i <= N; i++) {d[i] += num[i];for (int j = 1; j <= cnt && 1LL * prime[j] * i <= Max; j++) {int k = prime[j] * i;d[k] = max(d[k], d[i]);}ans = max(ans, d[i]);}printf("%d\n", ans);return 0;
}

做法三:质因数分解

这是赛时想到的毒瘤做法,只是比较耗空间,在 P o l l a r d − R h o Pollard-Rho Pollard−Rho质因数分解那里提到的时间复杂度只有 O ( n 0.25 ) O(n^{0.25}) O(n0.25),而且递归搜索所有因数也是常数时间复杂度,因此我们考虑质因数分解,我本地测试,分解 2 e 5 2e5 2e5个 1 e 7 1e7 1e7范围的数,耗时 380 m s 380ms 380ms,实际上证明了这种因数分解的做法是跑的飞快的。那么在做法一中,我们改为枚举所有数的因数倍,这样成功卡过赛时的辣鸡评测机。


//
// Created by Happig on 2020/10/25
//
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define ENDL "\n"
#define lowbit(x) (x&(-x))
#define mkp(x, y) make_pair(x,y)
#define mem(a, x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 1e7 + 10;
const int maxm = 2e5 + 10;int prime[maxn / 2], p[maxn], num[1005], pfac[1005];
int cnt1, cnt2, tot;void euler() {cnt1 = 0;for (int i = 1; i < maxn; i++) p[i] = i;for (int i = 2; i < maxn; i++) {if (p[i] == i) prime[++cnt1] = i;for (int j = 1; j <= cnt1 && 1LL * i * prime[j] < maxn; j++) {p[i * prime[j]] = prime[j];if (i % prime[j] == 0) break;}}
}void divide(int n) {cnt2 = 0;while (n != 1) {pfac[++cnt2] = p[n];n /= p[n];}sort(pfac + 1, pfac + 1 + cnt2);tot = 1, num[tot] = 1;for (int i = 2; i <= cnt2; i++) {if (pfac[i] == pfac[i - 1]) {num[tot]++;} else {num[++tot] = 1;pfac[tot] = pfac[i];}}
}vector<int> fac[maxm];
int pos;void dfs(int d, ll cur = 1) {if (d == tot + 1) {fac[pos].push_back(cur);return;}for (int i = 0; i <= num[d]; i++) {dfs(d + 1, cur);cur *= pfac[d];}
}int a[maxm], vis[maxn], d[maxn];int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);//ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
//    clock_t beg = clock();euler();int n;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);vis[a[i]]++;}sort(a, a + n);int m = unique(a, a + n) - a;for (int i = 0; i < m; i++) {divide(a[i]);pos = i;dfs(1, 1);}int ans = 0;for (int i = 0; i < m; i++) {d[a[i]] = vis[a[i]];int res = 0;for (auto j:fac[i]) {if (vis[j] && j != a[i]) res = max(res, d[j]);}d[a[i]] += res;//cout << a[i] << " " << d[a[i]] << endl;ans = max(ans, d[a[i]]);}printf("%d\n", ans);return 0;
}

B - Intelligent Robot(计算几何+最短路)

题目大意

在表格中给出起点和终点,但是在路径上可能分布着很多墙,墙用线段表示,墙不能穿过但是可以紧贴,问从起点到终点的最短路径的长度是多少。

解题思路

这题一看就特别眼熟,原来在kuangbin的计算几何基础专题中有道非常相似的 P O J 1556 POJ1556 POJ1556,当时做那道题收获就很大所以还记得做法。这个做法的前提是证明当墙挡住路的时候,无论如何从墙的端点处绕路总是最优的。那么我们将所有点存起来,所有线段存起来,枚举任意两点和所有线段判断是否相交,如果相交两点距离设为 i n f inf inf,这样就能建一张图,最后对图跑最短路算法即可,因为点数很少,直接上 F l o y d Floyd Floyd是最快的。

//
// Created by Happig on 2020/10/25
//
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define Seg Line
#define ENDL "\n"
#define lowbit(x) (x&(-x))
#define mkp(x, y) make_pair(x,y)
#define mem(a, x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 1e7 + 10;
const int maxm = 2e5 + 10;int dcmp(double d) {if (fabs(d) < eps) return 0;if (d < 0) return -1;return 1;
}struct Point {double x, y;Point(double a = 0, double b = 0) {x = a, y = b;}Point operator+(Point p) { return Point(x + p.x, y + p.y); }Point operator-(Point p) { return Point(x - p.x, y - p.y); }Point operator*(double d) { return Point(x * d, y * d); }double operator*(Point p) { return x * p.x + y * p.y; }Point operator/(double d) { return Point(x / d, y / d); }double operator^(Point p) { return x * p.y - y * p.x; }bool operator==(const Point &p) const { return x == p.x && y == p.y; }void print() { printf("(%.2lf,%.2lf)\n", x, y); }
};struct Line {Point p, q;Vector v;Line() {}Line(Point a, Point b) {p = a, q = b, v = b - a;}Point point(double t) {return p + v * t;}
};double dis(Point a, Point b) {return sqrt((b - a) * (b - a));
}bool isSegInter(Seg a, Seg b) {double c1 = a.v ^b.p - a.p, c2 = a.v ^b.q - a.p;double c3 = b.v ^a.p - b.p, c4 = b.v ^a.q - b.p;return (dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0);
}bool vis[610][610];   //判断两点之间是否能直接相连
double G[615][615];  //存两点间的距离,初始根据vis数组初始化为两点间距离
Point P[1005];        //保存所有点
Line walls[305];
int Path[610][610];void Print(int u, int v) {if (u == v) {printf("%d\n", v); return;}printf("%d ", u);Print(Path[u][v], v);
}int main() {double a, b, c, d;int n, m, K;scanf("%d%d%d", &n, &m, &K);for (int i = 1; i <= K; i++) {scanf("%lf%lf%lf%lf", &a, &b, &c, &d);P[i] = Point(a, b), P[K + i] = Point(c, d);walls[i] = Line(P[i], P[K + i]);}scanf("%lf%lf%lf%lf", &a, &b, &c, &d);P[0] = Point(a, b), P[2 * K + 1] = Point(c, d);  //起点终点memset(vis, 0, sizeof(vis));for (int i = 0; i <= 2 * K + 1; i++) {for (int j = 0; j <= 2 * K + 1; j++) {int flag = 1;if (i == j) {G[i][j] = 0;continue;} //这里初始化到本身距离为0for (int h = 1; h <= K; h++) {if (isSegInter(Line(P[i], P[j]), walls[h])) {flag = 0;break;}}if (flag) vis[i][j] = 1;}}//对于能相连的点调用距离公式,否则为INFfor (int i = 0; i <= 2 * K + 1; i++) {for (int j = 0; j <= 2 * K + 1; j++) {Path[i][j] = j;if (vis[i][j]) G[i][j] = dis(P[i], P[j]);else G[i][j] = INF;
//            printf("%.1lf ", G[i][j]);
//            printf("%d", vis[i][j]);}
//        printf("\n");}for (int k = 0; k <= 2 * K + 1; k++) {for (int i = 0; i <= 2 * K + 1; i++) {for (int j = 0; j <= 2 * K + 1; j++) {if (G[i][k] + G[k][j] < G[i][j]) {G[i][j] = G[i][k] + G[k][j];Path[i][j] = Path[i][k];}}}}printf("%.4lf\n", G[0][2 * K + 1]);
//    Print(0, 2 * K + 1);return 0;
}

C - Smart Browser(签到)

代码就不放了,毕竟有手就行(逃

D - Router Mesh(Tarjan)

图论队友赛时当场学习,结果WA了无数发过不了。补上代码:

//
// Created by Visors on 2020/10/25.
//
// 题目名:TODO
// 题目来源:TODO
// 题目链接:TODO
// 算法:D.cpp
// 用途:TODO
// 时间复杂度:O(TODO)
//#include <bits/stdc++.h>using namespace std;int block = 0;struct Tarjan {struct Edge {int to, next;Edge() = default;Edge(int to, int next) : to(to), next(next) {}};int vertexNum{}, edgeNum{};int cnt{};              // 当前时间戳int root{};             // 保存当前搜索树根vector<Edge> edges;vector<int> heads;vector<int> dfn;        // 时间戳vector<int> low;        // 最早追溯时间vector<bool> isCut;     // 割点vector<int> branches;   // 分支数
//    set<int> cuts;          // 割点编号集void init(int n, int m) {cnt = 0;vertexNum = n;edgeNum = m;heads.resize(vertexNum);fill(heads.begin(), heads.end(), -1);dfn.resize(vertexNum);low.resize(vertexNum);isCut.resize(vertexNum);branches.resize(vertexNum);}void addEdge(int u, int v) {edges.emplace_back(v, heads[u]);heads[u] = edges.size() - 1;}void dfs(int u) {dfn[u] = low[u] = ++cnt;int tot = 0;for (int i = heads[u]; ~i; i = edges[i].next) {int &v = edges[i].to;if (!dfn[v]) {//                branches[u]++;dfs(v);low[u] = min(low[u], low[v]);if (low[v] >= dfn[u]) {tot++;if (u != root || tot > 1) isCut[u] = true;   // 对树根特判}} else low[u] = min(low[u], dfn[v]);}if (u != root) tot++;branches[u] = tot;}void run() {for (int i = 0; i < vertexNum; i++)if (!dfn[i]) {root = i;block++;dfs(i);}}
} tarjan;int main() {ios_base::sync_with_stdio(false);cin.tie(nullptr), cout.tie(nullptr);int n, m;cin >> n >> m;tarjan.init(n, m);for (int i = 1, u, v; i <= m; i++) {cin >> u >> v;u--, v--;tarjan.addEdge(u, v);tarjan.addEdge(v, u);}tarjan.run();bool first = true;for (int i = 0; i < n; i++) {//        cout << endl << tarjan.branches[i] << endl;if (first) {cout << block + tarjan.branches[i] - 1;first = false;} else cout << ' ' << block + tarjan.branches[i] - 1;}cout << endl;return 0;
}

F- Design Problemset(二分答案)

这题队友补的,我就没看了,只放下代码

#include<bits/stdc++.h>using namespace std;
typedef long long ll;const int maxn=1e5+5;ll a[maxn],l[maxn],r[maxn];
ll k,L,R;
bool check(double mid)
{//cout<<"mid "<<mid<<endl;if(mid==0)return 1;double tot=0;double res=0;for(int i=1;i<=k;i++){if(double(mid*l[i])>a[i])return 0;ll num=a[i]/mid;//讲第i种问题分成mid组,每组的数量是多少num=min(r[i],num);//第i种问题最多可以取的数量,//如果该种问题取的是r【i】,即使还有平分后剩余也不能再用if(num!=r[i])res+=a[i]-num*mid;tot+=num;}tot+=res/mid;if(tot>=L)return true;return false;
}
int main()
{cin>>k>>L>>R;for(int i=1;i<=k;i++)cin>>a[i];for(int i=1;i<=k;i++)cin>>l[i]>>r[i];ll cntl=0,cntr=0;for(int i=1;i<=k;i++)cntl+=l[i],cntr+=r[i];if(cntl>R || cntr<L){cout<<0<<'\n';return 0;}ll lt=0,rt=1e18+5;ll ans;while(rt-lt>0){ll mid=(rt+lt+1)>>1;if(check(mid))lt=mid;else rt=mid-1;}cout<<lt<<'\n';return 0;
}

I - Walking Machine(搜索)

这题应该也是签到,队友写的

//
// Created by Visors on 2020/10/25.
//
// 题目名:TODO
// 题目来源:TODO
// 题目链接:TODO
// 算法:I.cpp
// 用途:TODO
// 时间复杂度:O(TODO)
//#include <bits/stdc++.h>using namespace std;typedef pair<int, int> pii;const int N = 1005, M = 1005;char G[N][M];
bool book[N][M];
int n, m;
int ans = 0;
queue<pii> q;
int dir[4][2] = {{0, 1},{0, -1},{1, 0},{-1, 0}};
char check[4] = {'A', 'D', 'W', 'S'};int main() {ios_base::sync_with_stdio(false);cin.tie(nullptr), cout.tie(nullptr);cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {cin >> G[i][j];if (i == 1 || i == n || j == 1 || j == m) {if (i == 1) {if (j == 1 && (G[i][j] == 'A' || G[i][j] == 'W')) {q.emplace(i, j);book[i][j] = true;continue;}if (j == m && (G[i][j] == 'D' || G[i][j] == 'W')) {q.emplace(i, j);book[i][j] = true;continue;}if (G[i][j] == 'W') {q.emplace(i, j);book[i][j] = true;}continue;}if (i == n) {if (j == 1 && (G[i][j] == 'A' || G[i][j] == 'S')) {q.emplace(i, j);book[i][j] = true;continue;}if (j == m && (G[i][j] == 'D' || G[i][j] == 'S')) {q.emplace(i, j);book[i][j] = true;continue;}if (G[i][j] == 'S') {q.emplace(i, j);book[i][j] = true;}continue;}if (j == 1 && G[i][j] == 'A') {q.emplace(i, j);book[i][j] = true;continue;}if (j == m && G[i][j] == 'D') {q.emplace(i, j);book[i][j] = true;}}}pii tmp;while (!q.empty()) {tmp = q.front();ans++;int &x = tmp.first,&y = tmp.second;q.pop();for (int i = 0, nx, ny; i < 4; i++) {nx = x + dir[i][0];ny = y + dir[i][1];if (x > 0 && x <= n && y > 0 && y <= m && G[nx][ny] == check[i] && !book[nx][ny]) {q.emplace(nx, ny);book[nx][ny] = true;}}}cout << ans << endl;return 0;
}

J - Matrix Subtraction(二维差分)

题目大意

给出一个矩阵,现在还有一个大小一定且可以在大矩阵内随意移动的子矩阵,每次可以对子矩阵内的所有数都减一,问大矩阵最后能否都减为 0 0 0。

解题思路

不难想到如果最终都能减为 0 0 0,无论从哪个位置出发开始减都是可以的,那么我们考虑从右上角出发,每次减去最小的元素,如果存在某个元素被减后小于 0 0 0显然无法完成。这个过程明显是二维差分,时间复杂度 O ( n m ) O(nm) O(nm)。


//
// Created by Happig on 2020/10/27
//
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define ENDL "\n"
#define lowbit(x) (x&(-x))
#define mkp(x, y) make_pair(x,y)
#define mem(a, x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 1e9 + 7;
const int maxn = 2e5 + 10;int p[1005][1005], d[1005][1005];
int T, n, m, a, b;void add(int i, int j, int x, int y, int val) {d[i][j] += val, d[x + 1][y + 1] += val;d[x + 1][j] -= val, d[i][y + 1] -= val;
}void print() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cout << d[i][j] << " ";}cout << endl;}
}int main() {//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> T;while (T--) {cin >> n >> m >> a >> b;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> p[i][j];d[i][j] = p[i][j] - p[i - 1][j] - p[i][j - 1] + p[i - 1][j - 1];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {d[i][j] = d[i][j] + d[i - 1][j] + d[i][j - 1] - d[i - 1][j - 1];if (d[i][j] < 0) {goto fail;} else if (d[i][j] > 0) {if (i + a - 1 > n || j + b - 1 > m) goto fail;else add(i, j, i + a - 1, j + b - 1, -d[i][j]);}}}cout << "^_^" << ENDL;continue;fail:cout << "QAQ" << ENDL;}return 0;
}

2020ICPC·小米 网络选拔赛第一场相关推荐

  1. 2020ICPC·小米 网络选拔赛第一场 J.Matrix Subtraction

    2020ICPC 小米 网络选拔赛第一场 J.Matrix Subtraction 题目链接 题目描述 Given a matrix MM_{}M​ of size n×mn\times mn×m a ...

  2. 2020ICPC·小米 网络选拔赛第一场 D.Router Mesh

    2020ICPC·小米 网络选拔赛第一场 D.Router Mesh 题目链接 题目描述 In a Mesh networking system, there are nn_{}n​ MI Route ...

  3. 2020ICPC·小米 网络选拔赛第一场(D. Router Mesh)

    题意: 模板题,求图中每个割点能把网络分成几个点双连通分量(不是割点就输出他有几块即可). 题解: 跟POJ 的SPF很像 这题用Tarjan来求,首先我们需要统计出来具体有几个连通块. 对于每个连通 ...

  4. acm-(推式子、好题、数学、排列计数)2020ICPC·小米 网络选拔赛第一场 H.Grouping

    传送门 先将aia_iai​从小到大排序. 然后这里有一些符号约定: ggg表示一个分组, wg=∣ai−aj∣w_g=|a_i-a_j|wg​=∣ai​−aj​∣表示某个组ggg的权值, GGG表示 ...

  5. 2020ICPC·小米 网络选拔赛第一场 全部题解

    整理的算法模板合集: ACM模板 目录 题目传送门 题目总体情况 A.Intelligent Warehouse B.Intelligent Robot C.Smart Browser D.Route ...

  6. 2020ICPC·小米 网络选拔赛第一场(Matrix Subtraction (二维差分))

    题目传送门 Matrix Subtraction 题目大意 给你一个 n × m n×m n×m的矩阵,每次可从矩阵中选择一个大小为 a × b a×b a×b的矩阵,使得该子矩阵的值全部减一 求最后 ...

  7. 2020ICPC·小米 网络选拔赛第一场 Intelligent Warehouse(DP)

    题意: n个数,要求取得最多的数,使得任意两个数其中一个为另一个倍数. 思路: 则定义dp[i]dp[i]dp[i]为第i个数为取出序列数中最大数时,最多取多少数. 则dp[i]dp[i]dp[i]向 ...

  8. ICPC2020小米网络选拔赛第一场复盘

    1.看题 第一次组队打ICPC,可能任务分配上还有待优化 但是有个团队,感觉安心好多. 我们有三个人,开始是分开来,每人看三题 djn看ABC,jyf看DEF,我看GHI,JK没人看 我开始只来得及看 ...

  9. 2020ICPC 小米 网络选拔赛第二场

    比赛链接 D - Determinant(行列式化简) 题目大意 给出行列式Mij={aibji≠jaibj+xi=jM_{ij} = \left\{\begin{array}{rcl} a_ib_j ...

最新文章

  1. 特别推荐:RHCE考试经验
  2. Python获取当前工作目录
  3. 刚刚,华为云挂了。。。
  4. 网银和银企直联的区别
  5. android 可行性分析,可行性研究项目分析程序与步骤
  6. 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)
  7. 卷积神经网络CNN的由来,为什么要用卷积?
  8. Web | MIME类型
  9. STM32工具使用---STVP烧录工具
  10. 前端,你需要掌握的重点!!
  11. 2018-01-20 HDU 4609 FFT 快速傅里叶变换
  12. Java8 Lambda表达式学习笔记——一文学懂笔记系列(一)
  13. android 强制退出程序,Android 强制且彻底的退出app
  14. 2023年湖北一级(高级)技师二级技师报名时间、考试时间是什么时候?
  15. bootstrap侧面菜单栏
  16. JAVA使用barcode4j生成条形码和二维码图片以及带logo的二维码,验证码图片
  17. 新加坡金融科技节之声|蚂蚁金服CTO程立:面向全球开放能力
  18. 游戏服务器——网关服
  19. 关于MP3文件中找不到TAG标签的问题
  20. Python练习之函数,装饰器,面向对象

热门文章

  1. 富爸爸---财富自由之路
  2. mysql 增加外键_Mysql 添加外键
  3. 泡泡一分钟:Teaching Robots to Draw
  4. 《Python编程:从入门到实践》知识点速刷
  5. 元盛居门店管理系统(门店管理板块)
  6. 【vue弹框和div拖拽功能】vue-elementul弹框拖拽功能,移动拖拽功能,普通div拖拽功能【拿来即用,直接复制】
  7. 如何用python 300行代码实现中医问诊AI
  8. 配置Swagger带token的三种方式
  9. 【phpcms-v9】phpcms-v9中模板载入函数template详解
  10. spine 所有动画的第一帧必须把所有能K的都K上