当前位置: 首页 > news >正文

2022SDNU-ACM结训赛题解

首先感谢一下各位出题人的精心准备、验题人的辛勤付出、以及选手的积极参加

题解

Problem A 柳予欣的归来【数学】

出题人: bhq

没想到一血是被打完山大的牛客比赛后来结训赛玩的wyx拿走的!

题目描述:

计算(∑0<d<pd−1)m(\sum_{0<d<p}d^{-1})^m(0<d<pd1)m,其中 d−1d^{-1}d1ddd 在模 ppp ( ppp 是一个素数) 意义下的乘法逆元,由于结果可能很大,请对 998244353998244353998244353 取模。

思路:

本题是一个小思维题,对于一个素数 ppp 来说,ppp 的剩余系的每个元素的逆仍然构成它的剩余系。我们记 ppp 的剩余系是 PPP ,对于 a∈Pa \in PaP 来说, aaa 的逆一共有两种情况,第一种情况是 a−1=aa^{-1}=aa1=a,第二种情况是 a−1=b,b∈Pa^{-1}=b,b\in Pa1=b,bP,此时b−1=ab^{-1}=ab1=a,所以总体来说取逆并不会有什么变化,括号里面本质上就是一个等差数列求和。注意数据范围,ppp 会很大,所以 p∗(p−1)p*(p-1)p(p1) 时会爆 longlonglonglonglonglong,所以要先取模 998244353998244353998244353,除以 222 转化成乘 222 的逆元,之后做一遍快速幂就可以了。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
const ll N = 1e5+5;
const ll mod = 998244353;ll qpow(ll a, ll b)
{a %= mod;ll ans = 1;while(b){if(b & 1)ans = (ans * a) % mod;a = (a * a) % mod;b >>= 1;}return ans;
}int main()
{std::ios::sync_with_stdio(false);ll p, m;cin >> p >> m;p %= mod;ll ans = (p * (p-1) % mod) * qpow(2, mod-2) % mod;cout << qpow(ans, m) << '\n';return 0;
}

Problem B 收收心找个电子厂上班了【区间贪心/差分约束】

出题人: LYJ

很可惜,赛时并没有人过这个题

题目描述:

给你m种条件(l[i],r[i],c[i]),要求构造一个01串,使得l[i]r[i]中至少有c[i]个1,问满足所有条件下1的数量最少的串是什么

思路1

经典的区间贪心问题,我们将m种条件按照r从大到小排序

对于一个区间[l,r],我们先计算一下区间中已经存在了多少个1,剩下的1就选最靠近r的那几个不是1的位置。

所以我们需要一个数据结构维护一下区间查询/更新 1的数量,还需要一个数据结构可以知道当前这个位置往前的一个不是1的位置,来进行更新

我们可以用树状数组或者线段树进行区间的维护

利用并查集进行维护i往前的第一个不为1的位置

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod 998244353
#define No cout<<"No\n"
#define Yes cout<<"Yes\n"
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define lowbit(x) (x&(-x))
#define io ios::sync_with_stdio(false)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x, y, p;
struct ran{int l, r, x;int id;bool operator < (const ran &a)const{return r < a.r;}
}tr[MAX];int ans[MAX];
int fa[MAX];
int getfa(int x){return x == fa[x] ? x : fa[x] = getfa(fa[x]);
}int ar[MAX];
void add(int id){while(id <= n){++ar[id];id += lowbit(id);}
}
int getans(int id){int ans = 0;while(id){ans += ar[id];id -= lowbit(id);}return ans;
}void work(){cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> tr[i].l >> tr[i].r >> tr[i].x;tr[i].id = i;}sort(tr+1, tr+1+m);for(int i = 1; i <= n; ++i)fa[i] = i;for(int i = 1; i <= m; ++i){tr[i].x -= (getans(tr[i].r) - getans(tr[i].l - 1));if(tr[i].x <= 0)continue;for(int id = getfa(tr[i].r); tr[i].x;id = getfa(id)){add(id);--tr[i].x;fa[id] = getfa(id-1);ans[id] = 1;}}for(int i = 1; i <= n; ++i)cout << ans[i] << " \n"[i==n];
}int main(){io;work();return 0;
}

思路2:

差分约束板子题

假设所求数组叫做ar[i]

则我们令sum[i]表示ar数组的前缀和数组,对于l, r, c我们可以转换成sum[r]-sum[l-1] >= c,因为求的是最小值,所以跑最长路,用>号,也就是sum[r] >= sum[l-1] + c,建一条l-1r的权值为c的边,但是为了避免使用0,我们改成lr+1建一条边

因为是前缀和,且一个位置最多一个1,所以建立一个0≤sum[i]-sum[i-1]≤1的条件,拆开来看就是sum[i]≥sum[i-1]+0,建一条从i-1i的权值为0的边,sum[i-1]≥sum[i]-1,建立一条从ii-1的权值为-1的边,因为存在负权边,所以跑SPFA

得到的前缀和数组再做一次差分就可以得到原数组

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod 998244353
#define No cout<<"No\n"
#define Yes cout<<"Yes\n"
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 1000000 + 50
int n, m, k, l, r, c, p;int tot;
int head[MAX];
struct ran{int to, nex, val;
}tr[MAX];
inline void add(int u, int v, int c){tr[++tot].to = v;tr[tot].val = c;tr[tot].nex = head[u];head[u] = tot;
}int dis[MAX];
bool vis[MAX];
void spfa(){deque<int>q;for(int i = 1; i <= n; ++i){q.push_back(i);dis[i] = 0;vis[i] = 1;}while (!q.empty()) {int u = q.front();q.pop_front();vis[u] = 0;for(int i = head[u]; i; i = tr[i].nex){int v = tr[i].to;if(dis[v] < dis[u] + tr[i].val){dis[v] = dis[u] + tr[i].val;if(!vis[v]){vis[v] = 1;if(!q.empty() && dis[q.front()] > dis[v])q.push_front(v);else q.push_back(v);}}}}for(int i = 2; i <= n + 1; ++i){cout << dis[i] - dis[i - 1] << " \n"[i==n+1];}
}void work(){cin >> n >> m;for(int i = 1; i <= n; ++i){add(i, i+1, 0);add(i+1, i, -1);}for(int i = 1; i <= m; ++i){cin >> l >> r >> c;add(l, r+1, c);}spfa();
}int main(){io;work();return 0;
}

Problem C 我没有脑子【打表/矩阵快速幂】

出题人: JBQ

很遗憾这么签到的一道题没有人做

题目描述:

生兔子,兔子的数量是斐波那契数列

问第l亿年到第r亿年出生了多少兔子,且出生的兔子并不包括第l年出生的兔子,第0年是没有兔子出生的

思路:

观察一下数据范围,会发现0<=l,r<=300,显然是个简单的打表题,我们可以暴力跑斐波那契求出0亿到300亿的斐波那契数,跑的时候可以用三个变量来回倒换即可避免数组开不下的问题,大概本地跑个几分钟就能打出表,然后用数组记录下来第i亿年的斐波那契数,这就是一个前缀和,查询哪个区间就利用前缀和的性质计算一下就行

因为涉及到减法,所以会出现负数的情况,记得+mod后再对mod取模

当然,这是一个矩阵快速幂的板子题,套了就能过

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double pi = acos(-1);
const ll mod = 998244353;ll qz[] = {0,798940737,702476549,882271746,158813243,717203476,338005251,116925432,142361015,915249973,857532739,753217439,520526462,729616988,647870145,371082495,841434648,373792903,192185450,309635100,846033167,574139965,802208229,788931688,653823084,498623881,381227773,444199493,541776490,385469308,204954591,661354559,261075692,24044029,83866001,584279557,45051147,173356045,821097718,163787363,787428576,988607439,538194736,477301409,856030254,182481274,696848072,333236726,460460936,413870920,87699598,677867260,933901576,122519290,433328905,517328471,66133697,748952995,271526780,951814203,603251788,538205993,786735739,210759723,471369471,844152090,451425750,64320864,664523635,755126352,322282207,848963789,601663281,955920251,188264055,448820184,924870015,870684039,690825122,363991368,510949049,787514543,868353515,23576757,729097988,456367806,120642843,745912349,311624691,396321784,468768789,940449311,479622530,706285186,96018834,614222128,531387322,51266835,824627665,26443258,661596038,328505115,470346561,301752734,536314862,51032382,156416715,858226445,377889809,802029259,44891519,618514642,28412917,845529642,248409413,138438148,983915659,347993720,721251618,402015592,208058847,859078897,523989448,504052355,248065071,501719314,706051327,634108576,257642722,164709287,863618638,306954392,910875941,655103461,467141818,572508067,664175525,947444075,469933222,883991102,757741015,1474536,709356522,802778892,578012184,112096396,37994672,704609404,18735451,258157019,554151314,327440787,420681318,119115175,114348722,45849809,854152074,660727321,437865313,839664896,833951917,574989040,378592331,262142690,699881570,924047133,283460224,695823769,961649873,956270153,66045054,288527356,116809227,330703987,815531292,536702953,963616030,172058590,361328034,404667451,335937034,608229080,406337321,288852773,916154288,405321356,248562231,772003667,344018140,279265806,721778550,617440080,379179999,472866396,426600720,144286727,723894575,399751987,354317264,540289590,440230859,846662817,864857587,718655634,950096265,290426201,791678815,231978197,160685153,385229934,71853234,451895282,34336651,939727748,451455552,731675730,291527149,485355441,340321224,978564745,683403470,256607555,459702481,754509303,983134135,547374590,123507260,123212517,907699376,880893030,380044243,404686542,919434049,296606692,738071182,474476191,947772155,54578357,312799315,66989458,797607101,925860402,205607764,532696276,90867276,936962661,877887130,864602607,245414428,760338293,213637659,193249572,807595867,285884919,259032359,770485780,361717598,182833844,813779029,873553462,356707666,208580125,718898155,707280088,309609449,162174566,648557431,919420983,940109378,631849990,799994020,679817491,929829530,453450192,264396037,431709960,795394812,17661181,677218455,695586920,475003070,543790903,220685197,455960728,932178450,803872141,700865964,215343465,176830374,118069191,353690631,564849453,512987043,169310973,857323540,761677403,906282770,943136960,292380651,93349738,29943185};int main()
{ll T,p,q;cin>>T;while(T--){cin>>p>>q;cout<<(qz[q] - qz[p] + mod)%mod<<endl;}return 0;
}
#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 998244353
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x, y;
int tr[MAX];struct Matrix{ll tr[2][2];Matrix(){mem(tr, 0);}Matrix operator * (const Matrix y){Matrix ans;for(int i = 0; i < 2; ++i){for(int j = 0; j < 2; ++j){for(int k = 0; k < 2; ++k){(ans.tr[i][j] += tr[i][k] * y.tr[k][j]) %= mod7;}}}return ans;}void operator = (const Matrix b){for(int i = 0; i < 2; ++i){for(int j = 0; j < 2; ++j){tr[i][j] = b.tr[i][j];}}}
};
ll getans(ll n){Matrix ans, cnt;ans.tr[0][0] = ans.tr[1][1] = 1;cnt.tr[0][0] = cnt.tr[0][1] = cnt.tr[1][0] = 1;while(n){if(n & 1)ans = ans * cnt;cnt = cnt * cnt;n /= 2;}return ans.tr[0][0];
}ll fuck[MAX];void work(){for(ll i = 1; i <= 300; ++i){fuck[i] = getans(i * 100000000ll - 1);}int t;cin>>t;while(t--){cin >> x >> y;cout << (fuck[y] - fuck[x] + mod7) % mod7 << endl;}
}int main(){io;work();return 0;
}

Problem D 我是杀猪饲料,祝你天天开心【签到】

出题人: LYJ

本来没想出hello world的题,但是突然接到通知大二不打了,这套题只给大一打,我就连夜加了一道

如果没有这个题,大家很可能五个小时都在牢底坐穿

还是要祝一下蛇姐生日快乐耶!

题目描述:

输出”蛇姐生日快乐!!!”即可

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x;
int tr[MAX];void work(){cout << "蛇姐生日快乐!!!";
}int main(){io;work();return 0;
}

Problem E 没什么特殊意义,就是想混一个最长的题目名字,然后让大家点进来做这道题

出题人: NXY

关于xygg出了个权值线段树却被两个人用别的思路随便卡过去这件事

思路:

第一种做法:离散化 + 权值线段树
我们发现每个数本身没有什么用,我们需要的仅仅是他们之间的大小关系,而 NNN 又不是很大,所以考虑离散化。
然后把离散化之后的序列用权值线段树维护起来。

第二种做法:平衡树
动态查询第 kkk 大数,容易想到平衡树直接维护

第三种做法:对顶堆
szz\texttt{szz}szz 的考场做法。

第四种做法: 主席树
gts\texttt{gts}gts 的考场做法

大家如果要补题的话建议学习第一种做法和第三种做法,第一种做法很典型很常见,是一种必不可少的技能点。第三种做法思维上很巧妙很有意思,并且代码简短容易理解,也同样建议大家学习

#include<bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;int n,w;
int a[N],b[N],c[N];bool cmp(int x , int y)
{return x > y;}struct NO
{int l;int r;int w;
};struct SigmentT
{NO t[N * 4];void Build(int p , int l , int r){t[p].l = l; t[p].r = r;if(l == r) return;int mid = (l + r) >> 1;Build(p << 1 , l , mid);Build(p << 1 | 1 , mid + 1 , r);}void Updata(int p , int w){if(t[p].l == t[p].r) {t[p].w++; return;}int mid = (t[p].l + t[p].r) >> 1;if(w <= mid) Updata(p << 1 , w);else Updata(p << 1 | 1 , w);t[p].w = t[p << 1].w + t[p << 1 | 1].w;}int Query(int p , int k){if(t[p].l == t[p].r) return t[p].l;if(t[p << 1].w < k) return Query(p << 1 | 1, k - t[p << 1].w);else return Query(p << 1 , k);}
}tr;int main()
{//freopen("aa.in","r",stdin);scanf("%d%d",&n,&w); for(int i = 1; i <= n; i++)scanf("%d",&a[i]) , b[i] = a[i];std::sort(b + 1 , b + 1 + n);int LEN = std::unique(b + 1 , b + 1 + n) - b - 1;for(int i = 1, tmp; i <= n; i++)tmp = a[i] , a[i] = std::lower_bound(b + 1 , b + 1 + LEN , a[i]) - b , c[a[i]] = tmp;tr.Build(1 , 0 , LEN);for(int i = 1; i <= n; i++){int m = max(1 , i * w / 100);tr.Updata(1 , a[i]);printf("%d ",c[tr.Query(1 , i - m + 1)]);}}
#include<bits/stdc++.h>const int N = 3e5 + 10;int n,w;
int a[N];struct No {int p,siz,val,sel,son[2];
};struct SBT{int rt,idx;No t[N];void Pushup(int u) {t[u].siz = t[t[u].son[0]].siz + t[t[u].son[1]].siz + t[u].sel;}void rotate(int u) {int y = t[u].p , z = t[y].p;int k = t[y].son[1] == u;t[z].son[t[z].son[1] == y] = u , t[u].p = z;t[y].son[k] = t[u].son[k ^ 1] , t[t[u].son[k ^ 1]].p = y;t[u].son[k ^ 1] = y , t[y].p = u;Pushup(y) , Pushup(u);}void Splay(int u , int p) {while(t[u].p != p) {int y = t[u].p , z = t[y].p;if(z != p)if((t[z].son[1] == y) ^ (t[y].son[1] == u))rotate(u);else rotate(y);rotate(u);}if(!p) rt = u;}void insert(int val) {int u = rt , p = 0;while(u) {if(val == t[u].val) break;p = u , u = t[u].son[val > t[u].val];}if(!u) u = ++idx;t[u].sel++;t[u].p = p;t[u].val = val;if(p) t[p].son[val > t[p].val] = u;Splay(u , 0);}int getk(int k) {int u = rt;while(1) {if(k <= t[t[u].son[0]].siz) u = t[u].son[0];else if(k <= t[t[u].son[0]].siz + t[u].sel) {Splay(u , 0); return t[u].val;}else k -= t[t[u].son[0]].siz + t[u].sel , u = t[u].son[1];}}
}tr;const int inf = 1e9;int main() {//freopen("aa.in","r",stdin);scanf("%d%d",&n,&w); tr.insert(-1) , tr.insert(inf);for(int i = 1 , x; i <= n; i++) {scanf("%d",&x); tr.insert(x);int end = std::max(1 , i * w / 100);printf("%d ",tr.getk(i - end + 1 + 1));}
}

Problem F 泷1千0(hard version)【构造】

出题人: DJK

看hard版之前先看看easy版的

题目描述:

跟简单版相比,不同点在于字符串长度,和操作总次数发生了变化。

思路:

给出其中一种构造方式。

由于是对前缀进行操作,容易想到从后向前匹配两个01串,当s串与t串s串与t串st在位置iii不同时,执行操作iii,但当执行完操作iii后,s串和t串s串和t串st在位置iii依旧可能不匹配,所以我们需要预处理sss串,让它全变成000111,这样的话就可以保证执行操作iii后,一定匹配。

容易发现,至多操作2∗n2*n2n次(预处理至多nnn次,从后向前匹配过程至多nnn次)。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
//#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define pii pair<int,int>const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const double eps = 1e-4;
int n, sum;
string s1, s2;
char ch;
int ans[maxn];int main()
{io;//freopen("20.in", "r", stdin);//freopen("20.out", "w", stdout);cin >> s1 >> s2;n = s1.size();s1 = '$' + s1;s2 = '$' + s2;sum = 0;for(int i = 2; i <= n; ++i){if(s1[i] != s1[i - 1])ans[++sum] = i - 1;}ch = s1[n] - '0';for(int i = n; i > 0; --i){if(ch != (s2[i] - '0')){ans[++sum] = i;ch = 1 - ch;}}cout << sum;for(int i = 1; i <= sum; ++i) cout << ' ' << ans[i];cout << '\n';return 0;
}

Problem G A+B Problem【ull自然溢出】

出题人:NXY

a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊a+b啊

这个题最开始的时候是NXY想考ull自然溢出等于对264取模,所以题目名称本来叫做**“自然溢出啥事没有!”**,但是有狗提议改把a和b的数字的长度改到1e5,使得NXY卡了一下py(

思路:

需要用到的知识点有两个:

  • unsigned long long自然溢出等价于对 2642^{64}264 取模,也就是说自然溢出啥事没有!
  • (a×b+c)%p=((a×b)%p+c%p)%p(a\times b + c)\ \%\ p = ((a\times b)\ \%\ p+c\ \%\ p)\ \%\ p(a×b+c) % p=((a×b) % p+c % p) % p

因此我们只需要把输入的数 aaa 分解为 a=x∗10+ca = x * 10 + ca=x10+c即可

NXY 特意卡了 python

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int,int> pii;#define MAX 300000 + 50
string s;
ull a, b;void work(){cin >> s;a = b = 0;for(auto x : s){a = a * 10 + (ull)(x - '0');}cin >> s;for(auto x : s){b = b * 10 + (ull)(x - '0');}cout << (ull)(a+b) <<endl;
}int main(){io;work();return 0;
}

Problem H 柳予欣的色图【Pólya 计数】

出题人: BHQ

防AK题

题目描述:

一个手链上有 nnn 个珠子,有 nnn 种颜色,给每个珠子都染上颜色。有多少种不同的染色方法。由于方案数很多,请对 998244353998244353998244353 取模。

题解

Pólya 计数的裸题,很难,想了解可以自己了解。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define ll long long
const int N = 1e4+5;
const ll mod = 998244353;ll qpow(ll a, ll b, ll c){a %= c;ll ans = 1;while(b){if(b & 1)ans = (ans * a) % c;a = (a * a) % c;b >>= 1;}return ans;
}ll phi(ll n){ll ans = n;for(int i = 2; i*i <= n; ++i){if(n % i == 0){ans = ans / i * (i-1);while(n % i == 0)n /= i;}}if(n != 1)ans = ans / n * (n-1);return ans;
}void solve(ll n){if(n == 1)cout << 1 << '\n';else{ll ans = 0;for(int i = 1; i * i <= n; ++i){if(n % i == 0){if(i * i == n)ans = (ans + (phi(n/i) * qpow(n, i, mod) % mod)) % mod;else{ans = (ans + (phi(i) * qpow(n, n/i, mod) % mod)) % mod;ans = (ans + (phi(n/i) * qpow(n, i, mod) % mod)) % mod;}}}cout << (ans * qpow(n, mod-2, mod)) % mod << '\n';}
}int main()
{std::ios::sync_with_stdio(false);ll n;cin >> n;solve(n);return 0;
}

Problem I WWW的杂货铺【模拟】

出题人: WYY

题目描述:

M条出售记录,每条出售记录由物品名称、收货地、出售数目组成。

请按如下规则进行统计并输出:物品按收货地分类,并合并出售数目,收货地按字典序排列,同一收货地的物品按字典序排列。

思路:

很简单的模拟题,没什么意思

#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, op;
int x, y, z;
string s, t;struct ran{string s;map<string, int>mp;
}tr[105];void work(){cin >> n;for(int i = 1; i <= 100;++i)tr[i].mp.clear();map<string, int>mp;int tot = 0;for(int i = 1; i <= n; ++i){cin >> s >> t >> x;if(!mp.count(t))mp[t] = ++tot;tr[mp[t]].s = t;tr[mp[t]].mp[s]+=x;}for(auto [x,y] : mp){cout << tr[y].s << endl;cout << "--------------------\n";for(auto [u, v] : tr[y].mp){cout << "    ";cout << u << "(" <<v <<")\n";}cout << "--------------------\n";}}int main(){io;int tt;cin>>tt;for(int _t = 1; _t <= tt; ++_t){work();if(_t != tt)cout << endl;}return 0;
}

Problem J 去玩宝可梦喽~ 【dp+线段树】

出题人: DJK

题目描述:

脱离题干背景,单纯考虑区间操作,发现题意如下:

给你一个长度为n(1≤n≤5∗105)n(1≤n≤5*10^5)n(1n5105)的数组。你需要将其分成几段连续的子区间,每一段区间的权值如下:

  • 若区间和大于0,则为区间长度
  • 如区间和等于0,则为0
  • 如区间和小于0,则为区间长度的相反数

用一个式子表示即:val[l,r]=sign(sum[l,r])∗(r−l+1)val[l,r] = sign(sum[l,r]) * (r - l + 1)val[l,r]=sign(sum[l,r])(rl+1) (val[l,r]表示区间[l,r]的权值,sign函数同原题中的f函数,sum[l,r]亦相同)(val[l,r]表示区间[l,r]的权值,sign函数同原题中的f函数,sum[l,r]亦相同)(val[l,r][l,r],signfsum[l,r])

问你分出来的子区间的权值和最大为多少,并且是否大于等于HHH

思路

数据结构优化DP

我们首先考虑暴力解法。

定义dp[i]dp[i]dp[i][1,i][1,i][1,i]中的最大权值和,容易发现可以O(n)O(n)O(n)转移,总体复杂度需要O(n2)O(n^2)O(n2)

转移方程:dp[i]=max(dp[i],dp[j]+sign(sum[j+1,i])∗(i−(j+1)+1))其中(0≤j<i)dp[i] = max(dp[i], dp[j] + sign(sum[j+1,i]) * (i-(j+1)+1)) 其中(0≤j<i)dp[i]=max(dp[i],dp[j]+sign(sum[j+1,i])(i(j+1)+1))(0j<i)

复杂度过高,我们考虑优化。

根据signsignsign函数的值分类讨论,化简转移方程:

dp[i]=max(dp[i],dp[j]+sign(sum[i]−sum[j])∗(i−j))dp[i] = max(dp[i],dp[j]+sign(sum[i]-sum[j])*(i-j))dp[i]=max(dp[i],dp[j]+sign(sum[i]sum[j])(ij))

sum[i]==sum[j]sum[i]==sum[j]sum[i]==sum[j], dp[i]=max(dp[j])dp[i] = max(dp[j])dp[i]=max(dp[j])

sum[i]>sum[j]sum[i] > sum[j]sum[i]>sum[j],dp[i]=max(dp[j]−j+i)dp[i] = max(dp[j] - j +i)dp[i]=max(dp[j]j+i)

sum[i]<sum[j]sum[i] < sum[j]sum[i]<sum[j],dp[i]=max(dp[j]+j−i)dp[i] = max(dp[j] + j - i)dp[i]=max(dp[j]+ji)

我们只需要求出上述三种情况下对应的maxmaxmax,之后这三个值取maxmaxmax即可。

容易发现,需要一个支持单点修改+区间查询且复杂度过得去的数据结构来维护。

做法是预处理前缀和,之后离散化,然后按照前缀和建线段树(其他满足条件的数据结构均可)。

即线段树的下标表示sum[j]sum[j]sum[j],上述的三个最大值分别通query(sum[i],sum[i])query(sum[i],sum[i])query(sum[i],sum[i]),query(1,sum[i]−1)query(1, sum[i]-1)query(1,sum[i]1),query(sum[i]+1,n)query(sum[i] + 1, n)query(sum[i]+1,n)获得。

复杂度O(nlogn)O(nlogn)O(nlogn)

另外,提示中试试暴力是希望先写出暴力转移方程,方便之后的观察优化。

5e55e55e5的数据量暴力是不可能过的。

下面给出利用线段树优化的代码。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define itt set<node>::iterator
#define pii pair<int,int>const int inf = 0x3f3f3f3f;
const int maxn = 5e5 + 5;
int t, n, x, h;
int sum[maxn];
int dp[maxn];
vector<int> vt;
struct node
{int l, r;int dp, dp1, dp2;//维护上述的三个最大值int mid(){return (l + r) >> 1;}void print(){cout << l << ' ' << r << ' ' << dp << ' ' << dp1 << ' ' << dp2 << '\n';}
} tree[maxn<<2];void pushup(node &p, node &le, node &ri)
{p.l = le.l;p.r = ri.r;p.dp = max(le.dp, ri.dp);p.dp1 = max(le.dp1, ri.dp1);p.dp2 = max(le.dp2, ri.dp2);
}void pushup(int p)
{pushup(tree[p], tree[p<<1], tree[p<<1|1]);
}void build(int p, int l, int r)
{tree[p].l = l;tree[p].r = r;if(l == r){tree[p].dp = tree[p].dp1 = tree[p].dp2 = -inf;return ;}int mid = tree[p].mid();build(p<<1, l, mid);build(p<<1|1, mid + 1, r);pushup(p);
}void updata(int p, int pos, int dp, int id)
{if(tree[p].l == tree[p].r){tree[p].dp = max(tree[p].dp, dp);tree[p].dp1 = max(tree[p].dp1, dp - id);tree[p].dp2 = max(tree[p].dp2, dp + id);return ;}int mid = tree[p].mid();if(pos <= mid) updata(p<<1, pos, dp, id);else updata(p<<1|1, pos, dp, id);pushup(p);
}node query(int p, int l, int r)
{if(l > r) return {-inf, -inf, -inf, -inf};if(l <= tree[p].l && tree[p].r <= r) return tree[p];int mid = tree[p].mid();if(mid >= r) return query(p<<1, l, r);else if(mid < l) return query(p<<1|1, l, r);else{node le = query(p<<1, l, r);node ri = query(p<<1|1, l, r);node res;pushup(res, le, ri);return res;}
}void work()
{vt.clear();cin >> n >> h;for(int i = 1; i <= n; ++i){cin >> x;sum[i] = sum[i - 1] + x;vt.push_back(sum[i]);dp[i] = 0;}vt.push_back(0);sort(vt.begin(), vt.end());vt.erase(unique(vt.begin(), vt.end()), vt.end());build(1, 1, vt.size());node pp;int mx1, mx2, mx3, pos;pos = lower_bound(vt.begin(), vt.end(), 0) - vt.begin() + 1;updata(1, pos, 0, 0);for(int i = 1; i <= n; ++i){pos = lower_bound(vt.begin(), vt.end(), sum[i]) - vt.begin() + 1;mx1 = query(1, 1, pos - 1).dp1;mx2 = query(1, pos, pos).dp;mx3 = query(1, pos + 1, vt.size()).dp2;dp[i] = max(mx1 + i, max(mx2, mx3 - i));updata(1, pos, dp[i], i);}cout << dp[n] << ' ' << (dp[n] >= h) << '\n';
}signed main()
{io;cin >> t;while(t--) work();return 0;
}

Problem K 逃出虚圈!【bfs】

出题人: LYJ

出了一个bfs的模版题,没人做,好伤心,写了半天的题目背景,没人看,好伤心,甚至在赛时加了一个小彩蛋,也没人看,好伤心

虽然

题目描述:

n个点,m条边,无向图

给你p个起点,q个终点,问你从任意一个起点出发,到达任意一个终点需要的最短距离是多少

思路:

bfs就行,把起点都塞进队列里面,然后记录q个终点,跑的时候遇到第一个出现的终点的时候就是最短的

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 1000000 + 50
int n, m, k, x, y, a, b;
vector<int>G[MAX];queue<int>q;
set<int>se;
int dis[MAX];void bfs(){while(!q.empty()){int u = q.front();q.pop();if(se.count(u)){cout << dis[u] << endl;return;}for(auto v : G[u]){if(dis[v] != inf)continue;dis[v] = dis[u] + 1;q.push(v);}}cout << "N0" << endl;
}void work(){cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> x >> y;G[x].push_back(y);G[y].push_back(x);}mem(dis, inf);cin >> a >> b;for(int i = 1; i <= a; ++i){cin >> x;q.push(x);dis[x] = 0;}for(int i = 1; i <= b; ++i){cin >> x;se.insert(x);}bfs();}int main(){work();return 0;
}

Problem L 为爱发电的Oier【简单期望】

出题人: WWY

签到题,没人写,6

题目描述:

我们可以把题目理解成抛硬币,问期望抛多少次可以使得正面朝上的次数是n

思路:

显然,期望抛2次,可以使得正面朝上的次数是1

拿n次正面朝上的期望就是2*n

所以输出2*n就行

这里有一个很有意思的事情:

image-20221204200818664

十六分钟的时候就有人看到了这个题,并写出了正解,但是因为他没写输入,所以挂了,(笑死

#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int n, m, k, x;
int tr[MAX];void work(){cin >> n;cout << 2 * n << endl;
}int main(){io;work();return 0;
}

Problem M完全不管大一死活【分类讨论】

出题人: LYJ

出题的时候,在这个题前面出了五六个题,没有一个签到题,所以我就放了一个小讨论题

题目描述:

你在0的位置,目标是x的位置,y的位置有一个门,z的位置有一个钥匙,问你最少需要走几步能到x,如果不能到输出-1

思路:

签到题,简单分类一下就行,没什么意思

#include <bits/stdc++.h>
using namespace std;#define endl '\n'
#define inf 0x3f3f3f3f
#define mod7 1000000007
#define mod9 998244353
#define m_p(a,b) make_pair(a, b)
#define mem(a,b) memset((a),(b),sizeof(a))
#define io ios::sync_with_stdio(false)
#define debug(a) cout << "Debuging...|" << #a << ": " << a << "\n";
typedef long long ll;
typedef pair <int,int> pii;#define MAX 300000 + 50
int x, y, z;void work(){cin >> x >> y >> z;if(x == 0){cout << 0 << endl;}else if(x > 0){if(y < 0 || y > x)cout << x << endl;else {if(z > y)cout << "BLEACH yyds" << endl;else{if(z > 0)cout << x << endl;else cout << -z*2 + x << endl;}}}else{if(y < x || y > 0)cout << -x << endl;else{if(z < y)cout << "BLEACH yyds" << endl;else {if(z > 0)cout << 2*z - x << endl;else cout << -x << endl;}}}
}int main(){io;work();return 0;
}

Problem N 泷1千0(easy version)【构造】

出题人: DJK

题目描述:

给你两个字符串s,ts,ts,t,按照给定的操作方式,是sss串变成ttt串,要求在3∗n3*n3n次内完成(nnn是字符串的长度)。

思路:

给出其中一种构造方式。

我们希望当s串与t串s串与t串st在位置iii不同时,我们希望取反第iii个元素且不影响其他元素,这样就可以O(n)O(n)O(n)遍历一遍。

容易发现,取反和反转都拥有一个特征。即对一个01串取反或反转偶数次,字符串不变。

由此,我们即可实现取反第iii个位置,而不影响其他元素。

s串与t串s串与t串st在位置iii不同时,进行如下操作:

  • 执行操作iii
  • 执行操作111
  • 执行操作iii

可以发现,至多需要3∗n3*n3n次,满足题意。

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long ll;
#define int ll
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
#define itt set<node>::iterator
#define pii pair<int,int>const int inf = 0x3f3f3f3f;
const int maxn = 5e5 + 5;
int n;
string s, t;
int ans[3005];
int sum;signed main()
{io;cin >> s >> t;n = s.size();sum = 0;for(int i = 0; i < n; ++i){if(s[i] != t[i]){ans[++sum] = i + 1;ans[++sum] = 1;ans[++sum] = i + 1;}}cout << sum << ' ';for(int i = 1; i <= sum; ++i) cout << ans[i] << ' ';return 0;
}

总结

从出题情况来说,很多签到题没人看,没人做,线上比赛比线下比赛的相比,差距很大,有些同学线上比赛没人监督,就随便写两三个题就跑去玩了,这样很不好…

相关文章:

van-dialog 点击confirm确定时如果不满足条件则不允许关闭

<van-dialogv-model="showDialog"@confirm="confirmFn"@cancel="showDialog = false"title="添加故障现象"show-cancel-button:before-close="onBeforeClose"><div class="p10"><van-fieldv-model…...

20231325 贾罗祁 实验三《Python程序设计》实验报告

20231325贾罗祁 2023-2024-2《Python程序设计》实验三报告 课程:《Python程序设计》 班级: 2313 姓名: 贾罗祁 学号: 20231325 实验教师:王志强 实验日期:2024年4月17日 必修/选修: 公选课 1.实验内容创建服务端和客户端,服务端在特定端口监听多个客户请求。 客户端和服…...

逆向修改app就可以游戏充值到账?

hello ,大家好, 现在市场仍然流行着非常多的传奇类游戏私服或者其他类型的游戏私服,随着私服越来越多(很多并不合法),越来越多的人加入了破解,逆向修改,或者代充的队伍并从中获利。这里我给大家分享一下这些做代充的常规的做法,以及大家作为游戏服务器如何避坑做强校验…...

前端优化体积

个别js比较大,可以异步加载 如果是js文件,创建<script>后onload触发...

个人博客部署 github pages+hugo extened

### github 创建创建仓库 https://github.com/username/username.github.io.git打开 https://username.github.io/ ### 本机( Windows11)安装 Hugo extened打开 https://github.com/gohugoio/hugo/releases找到并下载 hugo_extended_0.125.3_windows-amd64.zip解压后,将其中…...

2024很漂亮的个人主页HTML源码

源码介绍 很漂亮的个人主页HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 截图效果 源码下载 很漂亮的个人主页HTML源码...

2022SDNU-ACM结训赛题解

首先感谢一下各位出题人的精心准备、验题人的辛勤付出、以及选手的积极参加 题解 Problem A 柳予欣的归来【数学】 出题人&#xff1a; bhq 没想到一血是被打完山大的牛客比赛后来结训赛玩的wyx拿走的&#xff01; 题目描述&#xff1a; 计算(∑0<d<pd−1)m(\sum_{0…...

《人类简史》笔记三—— 历史从无正义

目录 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的&#xff1f; 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 古时候&#xff1a; 上等人 平民和奴隶 现在&#xff1a;…...

Python实现基于用户的协同过滤推荐算法构建电影推荐系统

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐&#xff08;User-based CF&#xff09;的原理假设&#xff1a;跟你喜好相似的人…...

阿里巴巴专场——第322场周赛题解

目录 模拟法&#xff1a;6253.回环句 排序后模拟&#xff1a;6254. 划分技能点相等的团队 BFS&#xff1a;6255. 两个城市间路径的最小分数 BFS&#xff1a;6256. 将节点分成尽可能多的组 模拟法&#xff1a;6253.回环句 这道题直接按照题目的意思暴力模拟即可&#xff1a;…...

【机器学习】支持向量回归

有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 在阅读本篇之前建议先学习&#xff1a; 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归&#xff08;support vector regression&#xf…...

Linux安装mysql

1、 查看是否已经安装 Mysql rpm -qa | grep mysql 如果你查看出来有东西&#xff0c;可以使用下面命令将其删除 rpm -e 文件名 2 、下载官方 Mysql 包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 如果安装有提示&#xff1a;Cannot…...

JeecgBoot搭建(低代码)

环境安装 后端&#xff1a;JDK: 1.8 (小于11)、Maven: 3.5、MySql: 5.7、Redis: 3.2 前端&#xff1a;Node Js: 14.18 / 16、Npm: 5.6.0、Yarn: 1.21.1 、Pnpm 工具&#xff1a; IDEA、Navicat、Git、TortoiseGit拉取代码 后端&#xff1a;git clone https://gitee.com/jeecg/…...

【java】3-获取线程引用与线程的属性

1.获取线程的引用 在创建一个线程之后&#xff0c;我们很有必要去获取当前线程实例的引用&#xff0c;以便能够观察到线程的一些属性&#xff0c;或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread&#xff0c;我们便能拿到当前线程的引用 Thread.curr…...

2022-12-04一周学习

这周基本上还是在对前端学习的更多一点&#xff0c;主要是之前没有重视vue3的学习,现在在补上来&#xff0c;学习了vue3的一些知识&#xff0c;前端的权限管理&#xff0c;设置路由守卫&#xff0c;pinia&#xff0c;还学习了redis的一些基本操作&#xff0c;之前只是照搬了别人…...

CG-34 浊度传感器 简单说明

产品概述 浊度传感器是一种智能监测水中悬浮物对光线透过时所发生的阻碍程度的仪器。允许在水中的测量点进行无人值守的操作。采用自清洗设计&#xff0c;可清除水中附着物以及气泡聚集而影响测量结果。具有优异的抗污染能力&#xff0c;即使恶劣的环境长期在线监测&#xff0c…...

跟着实例学Go语言(二)

本教程全面涵盖了Go语言基础的各个方面。一共80个例子&#xff0c;每个例子对应一个语言特性点&#xff0c;非常适合新人快速上手。 教程代码示例来自go by example&#xff0c;文字部分来自本人自己的理解。 本文是教程系列的第二部分&#xff0c;共计20个例子、约1.2万字。 …...

linux+window+macos下的JDK安装

1. Linux中安装JDK &#xff08;1&#xff09;下载Linux版本的jdk压缩包 &#xff08;2&#xff09;解压 tar -zxvf 压缩包名 例如&#xff1a; tar -zxvf jdk-8u251-linux-x64.tar.gz&#xff08;3&#xff09;在系统配置文件配置java 编辑profile配置文件 vim /etc/prof…...

DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法

目录一. 立体脑电图&#xff08;SEEG&#xff09;1.1 SEEG概念1.2 SEEG作用1.3 SEEG的适用场景1.4 操作方法一. 立体脑电图&#xff08;SEEG&#xff09; 1.1 SEEG概念 立体脑电图&#xff08;SEEG&#xff09;&#xff1a;是一种借助外科微创的方法将电极植入到大脑不同的部…...

kubernetes—Service介绍

Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题&#xff0c;kubernetes提供了Service资…...

AlphaFold2源码解析(7)--模型之Evoformer

AlphaFold2源码解析(7)–模型之Evoformer 这篇文章我们主要药讲解AlphaFold2的Evoformer的代码细节。 Evoformer Stack 该网络有一个双塔结构&#xff0c;在MSA堆栈中具有轴向的自我注意&#xff1b;在Pair堆栈中具有三角形的乘法更新和三角形的自我注意&#xff1b;以及外积…...

docker 安装 redis 6.0.8 cluster 实战 (3主3从) 动态扩容

这里将上篇博客搭建的3主3从 扩容为 4主4从 1. 新建两个node节点 docker run -d \ --net host \ --privileged \ --name redis-node-7 \ --log-opt max-size100m \ --log-opt max-file3 \ -v /root/docker/redis-node-7/data:/data \ redis:6.0.8 \ --cluster-enabled yes \ -…...

20221204

You are so much more than how you look. 你比你的外表更有魅力 Never give up until the fight is over. 永远不要放弃&#xff0c;要一直战斗到最后一秒。 whats done cannot be undone 覆水难收 If I was going somewhere, I was running。 如果我要去哪儿&#xff…...

CN_数据链路层流量控制@可靠的传输机制@ARP协议

文章目录流量控制技术(协议)停止-等待流量控制滑动窗口流量控制发送窗口接收窗口基本原理可靠的传输机制确认机制ACK超时重传机制RTOARQ处理差错自动重传请求ARQ协议&#x1f388;ARQ具体协议单帧ARQ协议停止-等待协议SW-ARQ例连续ARQ协议后退N帧协议(GBN)GBN多帧滑动窗口累计确…...

程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…...

安装ubuntu20.04, CUDA11.4, cnDNN, tensorflow, pytorch

ubuntu22.04默认python为3.11 ubuntu20.04默认python为3.8 第一步&#xff0c;分区安装系统 efi引导区, 逻辑分区&#xff0c;512M root: 主分区&#xff0c;512M swap: 逻辑分区&#xff0c;64G home:逻辑分区&#xff0c;320G /:逻辑分区, 130G&#xff0c; CUDA是安装…...

shell脚本受限执行

shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.受限的内容包括&#xff1a;使用 cd 命令更改工作目录. 更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值. 读或更改 shell 环境选项…...

HTTP 速查手册

一、通用身份验证 # 服务端返回401&#xff0c;并告知验证类型为Basic GET 401 Unauthorized WWW-Authenticate: Basic realm"description"# 浏览器输入验证信息后&#xff0c;请求头中携带验证信息 Authorization: Basic xxxxxxxxxx二、Cookie # 服务端返回set-co…...

【计算机视觉】 摄像机标定

摄像机标定 齐次坐标 齐次坐标&#xff0c;将欧氏空间的无穷远点&#xff0c;与投影空间中有实际意义的消失点&#xff0c;建立起映射关系。 把齐次坐标转化为笛卡尔坐标的方法&#xff1a;是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质&#xff1a; 比较好的…...

【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…...

DHTMLX Diagram JavaScript/HTML5 Pro Library:5.0

Diagram — JavaScript/HTML5 Diagram Library Ω578867473 破解版DHTMLX Diagram comprises a set of interactive HTML5 UI components such as organization charts, flowcharts, decision trees, block diagrams, mind maps, etc. Consisting of nodes and connectors, di…...

GPS卫星位置解算

本文介绍了基于C语言的GPS卫星位置解算原理与程序设计。针对每个原理、公式、代码设计进行了详细讲解&#xff0c;希望能够给测绘学子们带来帮助。 参考书籍&#xff1a; 李征航 黄劲松&#xff1a;GPS测量与数据处理&#xff08;第三版&#xff09; 目录 基础原理 1&#xf…...

大数据:Sqoop 简介与安装

一、Sqoop 简介 Sqoop 是一个常用的数据迁移工具&#xff0c;主要用于在不同存储系统之间实现数据的导入与导出&#xff1a; 导入数据&#xff1a;从 MySQL&#xff0c;Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中&#xff1b; 导出数据&am…...

[附源码]计算机毕业设计文曦家教预约系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

HK1 BOX刷入 Armbian系统作为服务器

HK1 BOX刷入 Armbian系统作为服务器 1 安装Armbian到EMMC 硬件 HK1 BOX s905 x3 固件版本选择 Armbian_23.02.0_Aml_s905x3_bullseye_5.15.80_server_2022.12.01用usb启动&#xff0c;tf/sd有的设备不行&#xff0c;有干扰&#xff0c;有可能从TF卡无法启动系统。 用usb启…...

CEC2015:动态多目标野狗优化算法求解CEC2015(提供完整MATLAB代码,含GD、IGD、HV和SP评价指标)

一、动态多目标优化问题简介 现实世界中&#xff0c;许多优化问题不仅具有多属性&#xff0c;而且与时间相关&#xff0c;即随着时间的变化&#xff0c;优化问题本身也发生改变&#xff0c;这类问题称为动态多目标优化问题&#xff08;dynamic multi-objective optimization p…...

【蓝桥杯选拔赛真题31】python三位数组合个数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python三位数组合个数 一、题目要求 1、编程实现 2、输入输出...

SpringBoot项目--如何不停服更新应用?

原文网址&#xff1a;SpringBoot项目--如何不停服更新应用&#xff1f;_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java后端项目如何不停机更新服务。 在生产环境中&#xff0c;一般都会每个服务部署多个实例。只要多于1个实例&#xff0c;就可以不停服更新应用。 不停服…...

MVVM与Vue响应式原理

Vue的响应式实现原理 MVVM M&#xff1a;模型 》data中的数据 V&#xff1a;视图 》模板 VM&#xff1a;视图模型 》Vue实例对象 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0EWNM16D-1670161519474)(C:\Users\lucas\Desktop\学习\图片\mode…...

vue和react的生命周期

vue和react的生命周期 一、Vue的生命周期二、React的生命周期2.1.类组件2.2.函数式组件一、Vue的生命周期 初始化阶段(组件创建、数据初始化)、挂载、更新、销毁 父子组件生命周期执行顺序 初次加载组件时:父beforeCreate – 父created – 父beforeMount – 子beforeCreate …...

浏览器高度兼容性

浏览器的卷去高度 1.标准模式 document.documentElement.scrollTop 2.非标准模式 document.body.scrollTop 浏览器高度兼容性 1.标准模式下 浏览器的实际高度&#xff1a; document.body.clientHeight 浏览器的可视高度&#xff1a;document.documentElement.clientHeight 2.非…...

关于天干地支及其计算

以天干地支计算日期是我国悠良的传统文化&#xff0c;最近在看如何计算人的生辰八字&#xff0c;写了个程序&#xff0c;但是只能算年的干支&#xff0c;月、日的干支计算方法太复杂了&#xff0c;望之只能却步&#xff0c;还是乖乖去查万年历比较好。这里记下关于干支的一些东…...

数据结构和算法之如何建立图

小白BG.1 邻接矩阵表示的图结点的结构 typedef struct GNode *PtrToGNode;//PtrToGNode是指向GNode的一个指针 struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 }; typedef PtrToGNode MG…...

计算机毕业设计Java大众采编本微资讯发布平台(源码+系统+mysql数据库+lw文档)

计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档) 计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档)本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse…...

web前端-javascript-立即执行函数(说明、例子)

立即执行函数 /* (function(){alert("我是一个匿名函数~~~"); })(); */(function (a, b) {console.log("a " a);console.log("b " b); })(123, 456);1. 说明 函数定义完&#xff0c;立即被调用&#xff0c;这种函数叫做立即执行函数立即执…...

【计算机视觉】图像形成与颜色

图像形成与颜色 光照及阴影 辐射度学 颜色 颜色信息反映了入射光的能量分布与波长&#xff0c;可见光的波长在400nm到760nm之间。 RGB RGB分别代表三个基色&#xff08;R-红色、G-绿色、B-蓝色&#xff09;&#xff0c;如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中2…...

Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目

文章目录前言视频介绍项目截图项目地址项目源码以上就是本篇文章的全部内容&#xff0c;将你编写好的项目分享给你的朋友们或者那个TA吧&#xff01;制作不易&#xff0c;求个三连&#xff01;❤️ &#x1f4ac; ⭐️前言 今天博主在刷短视频时&#x1f610;&#xff0c;朋友推…...

[附源码]Python计算机毕业设计SSM进出口食品安全信息管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

电平触发的触发器

普通的SR锁存器没有任何抗干扰能力 我们要加控制信号&#xff0c;来抵抗干扰 比如说我们不把信号直接加在门上&#xff0c;我们可以再加一级门电路&#xff0c;让这个输出和输入不在同一个门上&#xff0c;我们希望加入一个控制信号&#xff0c;来控制电路工作的时刻 对电路结…...

php后端+JQuery+Ajax简单表单提交

通过ajax,如果从后端直接想前端返回数组,那前端收到的是一个‘Array’的字符串。所以,我比较习惯的是用json对象的格式。由后端通过json_encode()函数,把数组封装成对象,传递到前端;前端也以json的格式接收。这里用提交表单来举例说明。 页面显示如下: JQueryAjax.…...

论文投稿指南——中文核心期刊推荐(计算机技术2)

>>>深度学习Tricks&#xff0c;第一时间送达<<< 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。下面&#xff0c;简单介绍下什么是中文核心期刊要目总览&#xff1a; 《中文核心期刊要目总…...

集合java

java集合 集合、数组都是对多个数据进行存储操作的结构&#xff0c;简称Java容器 此时的存储&#xff0c;主要是指内存层面的存储&#xff0c;不涉及持久化的存储&#xff08;txt,jpg,avi&#xff09; Java集合可分为Collection 和 Map 两种体系 1. Collection接口&#xff1…...

spring boot 应用mybatis

Mybatis入门: Mybatis入门_做测试的喵酱的博客-CSDN博客 目录 一、spring boot 应用mybatis 核心 二、举例&#xff1a; 2.1 背景 2.2 项目结构&#xff1a; 2.3 依赖包 pom 2.4 项目配置文件application.yml 2.5 实例层entity 2.6 mybatis的mapper层 2.7 spring boot…...

Java项目:ssm图书馆管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 基于ssm的图书馆管理系统.主要功能包括&#xff1a;图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为…...

详解设计模式:命令模式

命令模式&#xff08;Command Pattern&#xff09;也被称为行动模式&#xff08;Action Pattern&#xff09;、事物模式&#xff08;Transaction Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 命令模式 是一种数据驱动的设计模式。请求以命令…...

家庭用户无线上网案例(AC通过三层口对AP进行管理)

组网需求 为一个家庭用户使用的网络架构。该家庭消费用户的上网流量大多是低速流量&#xff0c;例如浏览网页、玩游戏、看视频等。家庭成员使用的无线终端主要为手机、PC、电视机等。终端接入的数量正常情况下在10个以内&#xff0c;偶尔有家庭聚会等特殊情况&#xff0c;终端接…...

Qt实现XYModem协议(四)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据&#xff0c;并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…...

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流

windows下python opencv ffmpeg读取摄像头实现rtsp推流 拉流 整体流程1.下载所需文件1. 1下载rtsp推流服务器1.2 下载ffmpeg2. 开启RTSP服务器3. opencv 读取摄像头并调用ffmpeg进行推流4. opencv进行拉流5. opencv异步拉流整体流程 1.下载所需文件 1. 1下载rtsp推流服务器 下…...

iOS 全平台矢量动画库:体积小巧、功能丰富 | 开源日报 No.227

airbnb/lottie-ios Stars: 24k License: NOASSERTION lottie-ios 是一个用于在 iOS 平台上本地渲染 After Effects 矢量动画的库。 该项目主要功能、关键特性、核心优势包括&#xff1a; 跨平台支持&#xff1a;可在 iOS, macOS, tvOS, visionOS, Android 和 Web 上使用实时渲…...

vue3表单参数校验+正则表达式

我们的表单中有用户名、密码、电话号码、邮箱这四个项。 我们设置用户名为3到20位的非空字符 密码为3到25位非空字符 电话号码就用目前用的电话号码正则表达式&#xff0c;要求手机号码以 1 开头&#xff0c;第二位为 3 到 9 之间的数字&#xff0c;后面跟着任意 9 个数字&a…...

回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DBO-HKELM蜣螂算法优化混合核极限学习机多变量…...

【Redis 神秘大陆】003 数据类型使用场景

三、Redis 数据类型和使用场景 Hash&#xff1a;对象类型的数据&#xff0c;购物车List&#xff1a;队列/栈Set&#xff1a;String类型的无序集合&#xff0c;intset&#xff0c;抽奖、签到、打卡&#xff0c;商品评价标签Sorted Set&#xff1a;存储有序的元素&#xff0c;zip…...