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

NOIP备考

模拟赛 1

T1

https://www.luogu.com.cn/problem/T664700

前置知识是 P5019。

很典的思路。在 \(a\) 序列前后都塞 \(a_0=a_{n+1}=0\)。算长 \(n+2-1=n+1\) 的差分数组 \(c\)。易知 \(a\)\(c\) 的一个前缀和数组,即 \(a_i+c_i=a_{i+1}\)。已知 \(a_0=0\),只需要差分数组都等于 \(0\) 就符合 \(a\) 全为 \(0\) 的条件,于是问题变成:

\(n+1\)\(c\) 数组,每次选 \(i<j \ (i,j \in[1,n+1])\)\(c_i-1,c_j+1\)(这个操作 \(=\) 对于原序列 \(a\) 的区间 \([i,j-1]\) 整体 \(-1\),可以覆盖所有可能)。

显然尽量选一正一负,正的 \(-1\),负的 \(+1\)


为什么方案一定可行(重点)。

\(c\) 序列总和为 \(0\)。总量平衡。\(\sum\limits_{k=0}^{i}c_k=a_{k+1}\geq0\)

反证法:

假设 \(i\) 处有 \(c_i=x>0\)。那么右侧负项绝对值 \(y<x\) ,无法匹配。

右侧负数项之和 \(=-y\le \sum\limits_{k=i+1}^{n}c_k\)(因为没加上正数和)。

\[0=\sum\limits_{k=0}^{n}c_k=\sum\limits_{k=0}^{i-1}c_k+x+\sum\limits_{k=i+1}^{n}c_k \geq \sum\limits_{k=0}^{i-1}c_k+x-y \rightarrow \sum\limits_{k=0}^{i-1}c_k \le y-x < 0 \]

矛盾了。

最小操作次数 \(\frac{1}{2}\sum\limits_{i=0}^{n}c_i\)

贡献怎么算?

注意到 \((a+b+c)^2+b^2 \geq (a+b)^2+(b+c)^2\)

因此要使代价最小化,一定不会出现两次操作的区间互相包含。这样,我们就可以贪心地在每个 \(i\) 处向前匹配最靠前的 \(j\),使用一个队列维护所有仍然可行的匹配点即可。

对于最大值,那就是贪心找最靠后的匹配点,只需要把队列排序方式倒过来(或者加负号)。时间复杂度 \(O(n)\)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define For(i,l,r) for(int i=l;i<=r;i++)
int n;
const int N=1e6+10;
int a[N],c[N];
#define pii pair<int,ll>
#define fi first
#define se second
#define mp make_pair
ll ans1,ans2;
void solve(ll &ans,bool type){priority_queue<pii>q;For(i,1,n+1){if(i<=n&&c[i]>0){int k=type?i:-i;q.push(mp(k,c[i]));}if(i>=2&&c[i]<0){ll x=-c[i];int r=i-1;while(x>0){pii t=q.top();int l=t.fi;int k=type?l:-l;ll cnt=t.se;q.pop();ll y=min(cnt,x);//堆顶剩余次数和需抵消次数ans+=y*(r-k+1)*(r-k+1);x-=y;cnt-=y;if(cnt>0)q.push(mp(l,cnt));//还有剩余次数}}}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;For(i,1,n)cin>>a[i];For(i,1,n+1)c[i]=a[i]-a[i-1];solve(ans1,0);solve(ans2,1);cout<<ans1<<" "<<ans2;return 0;
}

T2

https://www.luogu.com.cn/problem/T664701

神秘数学题。

枚举 \(k\) 个阶段:一个阶段 \(a_i\) 代表一次复制 \(+\ (a_i-1)\) 次粘贴。注意到没有傻子会一直复制,一次复制至少一次粘贴。所以 \(k\) 很小。

代价可以写出:

\[kx+y\sum\limits_{i=1}^{k}(a_i-1)=k(x-y)+y\sum\limits_{i=1}^{k}a_i \]

原问题等价于:找序列 \(a\)\(\prod\limits_{i=1}^{k}a_i>n\),求 \(\min \{ k(x-y)+y\sum\limits_{i=1}^{k}a_i \}\)

基本不等式,积一定,要和最小就尽量平均。显然先平均分配,多出来的余数挨个发 \(1\) 给每个 \(a_i\)

#include<bits/stdc++.h>
using namespace std;
#define ll unsigned long long
#define For(i,l,r) for(int i=l;i<=r;i++)
ll n,x,y,mn=1e18;
ll get(int k){//二分最小的t^k>n ll l=2,r=n,res=2;while(l<=r){ll mid=l+(r-l)/2,t=1;bool f=0;For(i,1,k){if(t>n/mid){f=1;break;}t*=mid;if(t>n){f=1;break;}}if(f)r=mid-1;else{res=mid,l=mid+1;}}return res;
}
int main(){cin>>n>>x>>y;n++;For(k,1,60){ll t=get(k),ar=1;bool f=0;For(i,1,k){if(t!=0&&ar>n/t){f=1;break;}ar*=t;if(ar>n){f=1;break;}}if(f||ar>=n){mn=min(mn,k*x+(k*t-k)*y);continue;}ll cur=ar,cnt=0;while(cur<n&&cnt<k){cur=cur/t*(t+1);cnt++;}mn=min(mn,k*x+(k*t+cnt-k)*y);}cout<<mn;return 0;
}

T3

https://www.luogu.com.cn/problem/T664702

由于后面的覆盖会影响前面,不好处理,于是可以把整个过程倒过来,从后往前倒过来做,这样“后”操作的就不会影响到前面的序列。

由于每次覆盖都是由上一次的终点开始平移一段距离,因此整个过程中的有色部分,一定形成一段完整的区间,且后面的操作不会影响前面,于是可以考虑区间 dp。

但是如果不再增加一些限制,即使有色部分是一个区间,但是我们操作后刷到停止的那个点,可以是区间内的任何位置,这不利于我们进行转移。于是我们考虑整个有色部分的最后一次有效染色,即被成功染上的编号最小的颜色。

显然最小颜色的位置确定了,该有色部分的其他地方都不会被改变了。而且,若我们保证最后一次染色操作是有效的,那么刷子一定会停在有色区间的左右端点中的一个上,这就可以转移了。

\(f[i][l][r][0/1]\) 表示进行了后 \(i\) 次操作后,最后一次有效染色的颜色为 \(i\),最后停在左/右端点的不同颜色序列的种数。我们考虑用 \(f[i][l][r][0/1]\) 来更新 \(f[k][l][x][1]\) 以及 \(f[k][x][r][0]\),其中 \(k<i\),表示我们从 \([l,r]\) 区间中,通过染 \(k\) 这种颜色将有色区间往左或往右延伸了一部分。那么是否所有的 \((k,x,0/1)\) 都合法呢?显然我们既然钦定了 \(k\) 是继 \(i\) 后第一次有效染色,那么也就是说 \([i+1,k-1]\) 区间内的所有染色都是无效,我们要保证这段区间内的所有操作能通过一系列平移,一直待在已有色部分内,而不会超出去成为新的有效染色操作。

因此,我们要另外维护一个 dp 数组 \(g[k][j]\),表示通过 \([i+1,k]\) 这些操作,是否可以在保证每次移动在 \([1,r-l+1]\) (这是相对位置)范围内的情况下,最终停止于 \(j\) 处。有了这个数组,我们就可以知道 \(f[i][l][r][0/1]\) 是否能转移给 \(f[k][x][r][0]\),我们只需要查询 \(g[k-1]\) 中的某个值是否为 \(1\) 即可。

需要注意一个特别恶心的细节:当 \(i=n\) 时,即我们只进行了一次染色的时候,无论是从左端点还是右端点转移到同一边(比如从左端点往左延伸,或从右端点往左延伸),效果都是一样的(因为颜色只有一种,左右没有区别)。此时要注意特判,不能算重。

此时还是不能通过这题,因为直接转移是五次方的,我们考虑对状态进行优化。显然左右端点是镜像对称的关系,dp 值都是一样的,因此 \(0/1\) 这维可以省略。其次,我们每次操作其实并不关心左右端点的具体位置,其实只有有色部分的长度比较重要,我们可以直接将它写进状态里,就变成了 \(f[i][len]\)。最后统计答案的时候再乘上一个 \((m-len+1)\) 表示平移即可,复杂度降为四次方。

代码和题解是反向的。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Rep(i,r,l) for(int i=r;i>=l;i--)
const ll p=998244353;
int n,m,c[150];
ll f[150][150];
ll g[150][150];
void work(int i,int j,int k,int l){bool vis=0;int p1=j-c[k]+1;if(p1>=1&&p1<=l&&g[k+1][p1]){f[k][j]=(f[k][j]+f[i][l])%p;vis=1;}if(i==n&&vis)return;int p2=l-(j-c[k]);if(p2>=1&&p2<=l&&g[k+1][p2]){f[k][j]=(f[k][j]+f[i][l])%p;}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;For(i,1,n)cin>>c[i];f[n][c[n]]=1;ll ans=0;Rep(i,n,1){For(l,1,m){memset(g,0,sizeof(g));g[i][1]=1;Rep(k,i-1,1){if(c[k]==1){For(j,1,l)g[k][j]=g[k+1][j];continue;}Rep(j,l,c[k]){g[k][j]|=g[k+1][j-c[k]+1];}Rep(j,l-c[k]+1,1){g[k][j]|=g[k+1][j+c[k]-1];}}bool flag=0;For(j,1,l)flag|=g[1][j];if(flag){ll w=f[i][l]*(m-l+1)%p;if(i==n)ans+=w;else ans+=2*w;ans%=p;}Rep(k,i-1,1){For(j,l+1,m){work(i,j,k,l);}}}}cout<<ans;return 0;
}

T4

https://www.luogu.com.cn/problem/T664703

据说是经典套路。但是我完全不会。

选出最少的集合使得元素互不相交(序列选区间,树上选路径),可以考虑单点被覆盖次数的最大值。T645364 R7C - AVE。

考虑如何判断树上两条路径是否有交:若一条路径的 lca 在另一条路径上,那么这两条路径有交,否则无交。手玩一下容易发现这是正确的。而这个性质启发我们,路径是否相交,可以用 lca 来刻画。

如果树上被链覆盖次数最多的点,被覆盖次数为 \(cnt\) ,那么划分集合的数量至少是 \(cnt\)。那么是否能取到这个最小值呢?我们尝试构造。考虑将被覆盖次数为 cnt 的所有点拎出来作为关键点,我们尝试选出一个链的集合,使得删掉这集合中的链可以使得树上的点被覆盖次数的最大值降为 \(cnt-1\)。如果能这样一直操作下去,我们就构造出了一组方案。

由于路径的相交与lca有关,而要是有交,一定存在链 a 的 lca 在链 b 的 lca' 的子树内。因此,如果我们每次选出dfs 序最小的,被覆盖次数恰好为 cnt 的那个点,那么由于 dfs 序最小,它一定不会被其“上方”的某条链覆盖。此时我们若能找出以这个点为 lca的一条路径,就可以将它放进集合中,不会与集合之前的链相交。而这条路径是一定存在的,因为若没有任何路径的 lca 为这个点,那么说明这个点的父亲一定也会至少被覆盖 cnt 次,这与这个点是 dfs 序最小的这个条件不符。

所以,我们每次在树上找出覆盖数最大,且 dfs序最小的点,选出一条以它作为lca 的链,将链删除(即将路径上的点覆盖次数减一),然后再进行下一轮,直到树上覆盖数最大的点变小,这样我们就选出了一个集合,集合总数达到了下界。

树剖维护即可。

选择 dfs 序最小的点,是为了保证其不存在其他关键点祖先。

  • 先找到所有路径的最大重叠次数,这就是最少需要的集合数 k。
  • 从集合编号 k 开始,往 1 依次分配路径。
  • 每次找覆盖次数等于当前 k 的节点,选以该节点为 LCA 的一条路径。
  • 将这条路径分到集合 k,再减去它的覆盖次数以消除冲突。
  • 重复上述步骤,直到 k 减到 1 且所有路径都分配完。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define For(i,l,r) for(int i=l;i<=r;i++)
#define pb push_back
#define lc u<<1
#define rc u<<1|1
const int mod=998244353;
const int N=5e5+10;
int n,m,col[N];
int sz[N],wc[N],d[N],fa[N];
int rdfn[N],dfn[N],tp[N],tim;
vector<int>G[N];
vector<array<int,3>>e[N];
inline int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}return x*f;
}
inline void write(int n){if(n>9)write(n/10);putchar(n%10+'0');
}
void out(int x){if(x<0)putchar('-'),x=-x;if(x<10)putchar(x+'0');else out(x/10),putchar(x%10+'0');
}
void dfs1(int u,int f){d[u]=d[f]+1;fa[u]=f;sz[u]=1;wc[u]=0;for(int v:G[u]){if(v==f)continue;dfs1(v,u);sz[u]+=sz[v];if(sz[wc[u]]<sz[v]){wc[u]=v;}}
}
void dfs2(int u,int tpf){dfn[u]=++tim;rdfn[tim]=u;tp[u]=tpf;if(wc[u]){dfs2(wc[u],tpf);for(int v:G[u]){if(v==fa[u]||v==wc[u])continue;dfs2(v,v);}}
}
inline int lca(int u,int v){while(tp[u]!=tp[v]){if(d[tp[u]]<d[tp[v]])swap(u,v);u=fa[tp[u]];}return d[u]<d[v]?u:v;
}
struct node{int w,tag;
}t[N<<2];
inline void pushup(int u){t[u].w=max(t[lc].w,t[rc].w);
}
void build(int u,int l,int r){t[u].tag=0;t[u].w=0;if(l==r)return;int mid=(l+r)>>1;build(lc,l,mid);build(rc,mid+1,r);
}
inline void maketag(int u,int len,int val){t[u].w+=val;t[u].tag+=val;
}
inline void pushdown(int u,int l,int r){int mid=(l+r)>>1;maketag(lc,mid-l+1,t[u].tag);maketag(rc,r-mid,t[u].tag);t[u].tag=0;
}
void update(int u,int L,int R,int l,int r,int val){if(l<=L&&R<=r){maketag(u,R-L+1,val);return;}else if(!(r<L||l>R)){int mid=(L+R)>>1;pushdown(u,L,R);update(lc,L,mid,l,r,val);update(rc,mid+1,R,l,r,val);pushup(u);}return;
}
int qry(int u,int L,int R){if(L==R)return rdfn[L];int mid=(L+R)>>1;pushdown(u,L,R);if(t[rc].w>t[lc].w)return qry(rc,mid+1,R);else return qry(lc,L,mid);
}
void upd(int u,int v,int val){while(tp[u]!=tp[v]){if(d[tp[u]]<d[tp[v]])swap(u,v);update(1,1,n,dfn[tp[u]],dfn[u],val);u=fa[tp[u]];}if(d[u]>d[v])swap(u,v);update(1,1,n,dfn[u],dfn[v],val);
}
void solve(){n=read();m=read();tim=0;For(i,1,n){G[i].clear(),e[i].clear();}For(i,1,n-1){int u=read(),v=read();G[u].pb(v);G[v].pb(u);}dfs1(1,0);dfs2(1,1);build(1,1,n);For(i,1,m){int u=read(),v=read(),t=lca(u,v);e[t].pb({u,v,i});upd(u,v,1);}write(t[1].w);putchar('\n');int k=t[1].w;while(k){while(t[1].w==k){int x=qry(1,1,n);array<int,3>tmp=e[x].back();e[x].pop_back();int u=tmp[0],v=tmp[1],id=tmp[2];col[id]=k;upd(u,v,-1);}k--;}For(i,1,m){write(col[i]);putchar(' ');}putchar('\n');
}int main(){int T,id;cin>>id>>T;while(T--)solve();return 0;
}

作业一

真聪明的题。题目。

如果 \(a_n\) 不操作,那么每次修改的 \(y\in [0,2^{13}]\),不太好让贪心发挥作用;如果 \(a_n\) 被操作过了,那显然越大越好,此时 \(y\) 就没有限制了,可以考虑贪心看看新的题目有什么性质。

显然每个数只会被操作一次,且操作顺序不重要。容易想到一个复杂度与值域有关的做法:考虑从后往前 dp,设 \(f_{i,j}\) 表示从 \(i\)\(n\) 的数都已确定,其中第 \(i\) 个数为 \(j\) 的最小操作代价。由于 \(i+1\)\(n\) 的操作对 \(i\) 的影响容易通过异或得到,可以实现转移 \(f_{i,j}=\max(f_{i+1,a_i\oplus a_{i+1}\oplus j},f_{i+1,k}+b_i),k\ge j\)

本题中,操作后的 a 序列最大值不一定小于 \(2^{13}\),需要分类讨论。

\(a_n\) 最后一定作为序列的最大值。如果 \(a_n\) 没被操作过,那么所有元素最终都一定小于 \(2^{13}\),可以用上述 dp 解决。现在讨论强制操作 \(a_n\) 的情况。假设最终操作了的位置构成 \(p_1,p_2\cdots p_m\) ,其中 \(p_m=n\),那么我们显然可以贪心的让 \(a_n\) 异或上一个很大的数,这样答案不会更劣。此时考虑倒数第二次操作,即 \(p_{m-1}\),无论它到底在哪,我们总能找到一个数,使得 \(a_{p_{m-1}}\) 异或完之后, \(p_{m-1}\) 前面的数无论接下来怎么操作都不会超过 \(p_{m+1}\) 后面的数,且可以通过对低位的异或调整内部的大小关系。 操作就是这么自由。通过这个性质我们可以发现,如果只看低位,那么 \(a_{p_{m-1}}\) 可以从任何大小\(a_{p_{m-1}-1}\) 转移,因为一定有办法通过操作,使得前者小于后者。

所以,对于强制对 \(n\) 进行操作的 dp 就是:\(f_{i,j}=\max(f_{i+1,a_i\oplus a_{i+1}\oplus j},f_{i+1,k}+b_i),k\in [1,2^{13}]\) ,只有 k 的范围发生了变化。

P13662。

\(\operatorname {mex}\) 等于补集 \(\operatorname {min}\)。对于排列 \(q\) 的一段区间 \([l,r]\),补集是 \([1,l?1]\cup[r+1,n]\),取最小值后就是题目中的 \(min(a_{l?1},b_{r+1})\)

计算任意区间 \(\operatorname {mex}\) 和可以这样做:把 \(\operatorname {mex}\) 转化为 \(\sum\limits_{i}^{\infty}[x \geq i]\)

原式等于:\(\sum\limits_{l \le r}^{}\operatorname {mex}(l,r)=\sum\limits_{k}^{n}\sum\limits_{l \le r}^{}[ \operatorname {mex}(l,r) \geq k]\)

https://www.cnblogs.com/CuiyiSAI/articles/19066773

bitset 判断 DAG 的连通性。

时间复杂度 \(O(\frac{n^2}{w})\)\(w=64\)

先拓扑排序,然后逆拓扑序延展可到达节点。

#include <iostream>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;const int MAXN = 1000; // 节点最大数量,可根据实际情况调整vector<int> adj[MAXN]; // 邻接表存储DAG
int inDegree[MAXN];    // 节点入度
vector<int> topoOrder; // 拓扑排序结果
bitset<MAXN> reachable[MAXN]; // 每个节点的可达集合// 拓扑排序(Kahn算法)
void topo(int n) {queue<int> q;for (int i = 0; i < n; ++i) {if (inDegree[i] == 0) {q.push(i);}}while (!q.empty()) {int u = q.front();q.pop();topoOrder.push_back(u);for (int v : adj[u]) {if (--inDegree[v] == 0) {q.push(v);}}}
}// 计算所有节点的可达集合
void solve(int n) {// 按拓扑逆序处理节点for (int i = topoOrder.size() - 1; i >= 0; --i) {int u = topoOrder[i];reachable[u].set(u); // 自身可达// 合并所有直接后继的可达集合for (int v : adj[u]) {reachable[u] |= reachable[v];}}
}int main() {int n, m;cin >> n >> m; // 节点数、边数for (int i = 0; i < m; ++i) {int u, v;cin >> u >> v; // 有向边 u -> vadj[u].push_back(v);inDegree[v]++;}topo(n);solve(n);// 示例:查询节点u到v是否可达int u, v;cin >> u >> v;if (reachable[u].test(v)) {cout << "可达" << endl;} else {cout << "不可达" << endl;}return 0;
}

\[S = \frac{1}{2} \left| \sum_{i=1}^{n} \det \begin{pmatrix} x_i & y_i \\ x_{i+1} & y_{i+1} \end{pmatrix} \right| \]

其中 \(x_{n+1} = x_1\)\(y_{n+1} = y_1\)

模拟赛 2

T1

https://www.luogu.com.cn/problem/T667229?contestId=275981

豪题。

有多少 \(1,2,\cdots,n\) 的排列 \(P_1,P_2,\cdots ,P_n\) 满足:该排列的所有长度为 \(m\)子序列中,字典序最小的是序列 \(X\)

为了字典序最小,我们要杜绝某个 \(Y < X_i\)\(Y\) 后边选的够 \(m\) 个数。

下面有两个结论:

  • \(X\) 存在唯一的下降点。
    定义这个点为 \(pos\)。且必须满足:所有 \(i>pos\)\(X_i < X_{pos}\)

假设有两个下降点,那么:

\[x_1<x_2<...<x_{pos}>x_{pos+1} \]

\[x_{pos+1}<x_{pos+2}<...<x_{pos2}>x_{pos2+1} \]

\[x_{pos2+1}<x_{pos2+3}<...<x_{n} \]

\(x_{(pos+1) \rightarrow n}<x_{pos}\)

\(x_{(pos2+1) \rightarrow n}<x_{pos2}<x_{pos}\)

T2

https://www.luogu.com.cn/problem/T667230?contestId=275981

T3

https://www.luogu.com.cn/problem/T667231?contestId=275981

T4

https://www.luogu.com.cn/problem/T667232?contestId=275981

相关文章:

NOIP备考

模拟赛 1 T1 https://www.luogu.com.cn/problem/T664700 前置知识是 P5019。 很典的思路。在 \(a\) 序列前后都塞 \(a_0=a_{n+1}=0\)。算长 \(n+2-1=n+1\) 的差分数组 \(c\)。易知 \(a\) 是 \(c\) 的一个前缀和数组,即 \(a_i+c_i=a_{i+1}\)。已知 \(a_0=0\),只需要差分数组都…...

NVIDIA GPGPU 访存通路设计调研

纵向结构上,传统架构仅对用户暴露 2 层存储交互,而随着 Hopper 添加 st.async ,NVIDIA GPU 完成暴露 3 层存储结构的双向通信接口,即 \(2\times C_{3}^{2}=6\) 一共 6 种指令。Src\Dst RF SMEM DRAMRF x st. Shared st. GlobalSMEM ld. Shared x st. Async (Hopper)DRAM ld…...

用 Java 和 Tesseract 实现验证码图像识别

验证码图像识别在自动化测试、信息采集、系统登录等场景中有着重要的应用价值。本文将介绍如何使用 Java 语言结合 Tesseract OCR 引擎,构建一个完整的验证码图像识别流程,包括图像预处理与识别优化。 一、环境准备 安装 Java(推荐版本 11 及以上) 安装 Tesseract OCR 引擎…...

AGC003D

题意是给定一个集合 \(S\) 要求找到它的最大的子集使得子集里的任意两个数相乘都不是完全立方数。 \(S_i\le1e10\),集合大小小于 \(1e5\)。 首先对于每个数都把它的因子的指数对 \(3\) 取模,然后可以发现操作完了的形式都只有一种形式与它相乘可以得到完全立方数的数。那就在…...

Java 实现验证码图像识别与处理流程详解

在实际开发中,自动化处理验证码图像是提升系统智能化和测试效率的一个关键点。Java 作为一门稳健的编程语言,结合 OCR 技术可以有效实现验证码识别。本文将介绍如何使用 Java 配合 Tesseract OCR 引擎完成从图像读取、预处理到文字识别的完整流程。 一、项目依赖准备 安装 Ja…...

图论杂题。

胡马渐远蹄声尽,四顾萧条暮色起。 空城角随西风吟,废池乔木,犹厌言兵。 ——《无题》luogu P6880 反转边等价于删一条再加一条边。 加边的肯定随便求。 删边,如果删在最短路上我们就暴力跑一遍;否则肯定还是最短路。两个方向最短路上 \(\mathcal{O}(n)\) 条边。用稠密图朴…...

暑假训练小结

主要做bzoj题单。 前几天相当痛苦,水平太菜题单根本做不下去。 基本都是跟着题解写代码。 还记得最开始写的是一道网络流然后学的是ek。 熬过第一个阶段之后,从杀蚂蚁那道题之后开始发现自己可以大概看懂大部分题解的思路了。 别问我为什么是杀蚂蚁,因为那段时间里这个记得最…...

初识python:一些基础的知识(函数)

目录函数函数的几种定义方法函数的返回值函数的调用函数的实参和形参实参的分类 函数 函数的几种定义方法 函数拥有以下几种定义方法,第一种:没有参数 def self_max(): a,b = 10,20 if a > b: print(a) elif a == b: print(别搞,两个变量相同。) else: print(b) self_max(…...

Java并发编程(3)

Java内存模型 1、说一下你对Java内存模型(JMM)的理解Java程序运行在各种硬件和操作系统上,不同硬件的CPU缓存策略、内存访问顺序、指令重排规则可能都不一样。那JMM是Java规范定义的一个抽象模型,是一套规则:线程和主内存的交互:线程如何从主内存读变量、写变量 可见性保…...

斐波那契子序列

到处乱逛找到的一道有意思的题。 定义斐波那契序列为:前两项值不做限制,\(f_i=f_{i-1}+f_{i-2}(2<i\le n)\)。 给定一个长度为 \(n\) 的序列 \(a\),找出其最长的斐波那契子序列。 如果有多个最长输出字典序最小的一个。 正解做法貌似为 \(n^2logn\)。即动态规划加二分。 …...

[豪の学习笔记] 软考中级备考 基础复习#10

UML建模概述、类图、用例图、顺序图、活动图、状态图、通信图、构件图跟学视频:学以致知Learning - 软件设计师 基础阶段|考点理论精讲 Chapter 10 - UML建模 1 - 概述 ​ 统一建模语言UML是面向对象软件的标准化建模语言。UML由三个要素构成:UML的基本构造块、支配这些构造块…...

题解:CF2137D Replace with Occurrences

题意为给定一个长度为 \(n\) 的序列 \(b\),要求你构造一个序列 \(a\) 使得对于每一个序列 \(a\) 中的数 \(a_i\),在序列 \(a\) 都出现了 \(b_i\) 次。 可以发现 \(a\) 序列中的数的大小是无关紧要的,重要的是出现次数。 一开始可以很快的得出一个错解那就是判断完有无解之后…...

题解:CF2137C Maximum Even Sum

题意是给定两个数 \(a,b\),你可以进行一次操作,选定一个 \(b\) 的因数 \(k\),将 \(a\) 变为 \(a \times k\),并将 \(b\) 变为 \(b/k\),求出如何操作可以使得 \(a+b\) 是一个偶数,并且值最大,请输出这个最大值。 如果不考虑 \(a+b\) 是否为偶数,容易想到最大值为 \(a\ti…...

第02周 java预习

课前问题列表 1.方法相关问题 public class Main {static void changeStr(String x) {x = "xyz";}static void changeArr(String[] strs) {for (int i = 0; i < strs.length; i++) {strs[i] = strs[i]+""+i;}}public static void main(String[] args) {…...

编码规范

1.不对指针变量进行sizeof操作。 2.数组作为函数参数时,必须同时将其长度作为函数的参数。 3.字符串或指针作为函数参数时,请检查参数是否为NULL. 4.对字符串进行存储操作,确保字符串有\0结束符。 5.整数之间运算时必须严格检查,确保不会出现溢出、符号反转或除以0。 6.内存…...

深入解析:【译】Visual Studio 八月更新已发布 —— 更智能的人工智能、更出色的调试功能以及更多控制权

深入解析:【译】Visual Studio 八月更新已发布 —— 更智能的人工智能、更出色的调试功能以及更多控制权pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…...

命令模式在 TPL Dataflow 反馈回路管道中的应用及问题解决

命令模式与 TPL Dataflow 基础概念 命令模式的核心在于对一类对象公共操作的抽象,通过定义统一的方法签名,将操作封装为独立对象。这种设计思路不仅实现了调用者与实现者的解耦,还为事件驱动架构和 AOP 思想提供了天然支持。在.NET 生态中,TPL Dataflow 组件为这种抽象提供…...

Ubuntu 24.04 服务器调整MySQL 8.0.42 三节点集群(一主两从架构)安装部署配置教程

Ubuntu 24.04 服务器调整MySQL 8.0.42 三节点集群(一主两从架构)安装部署配置教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…...

使用almalinux基础镜像创建nginx镜像

前言 使用almalinux:latest镜像构建nginx镜像,启动容器时,nginx自动启动 创建基本文件 cd ~ mkdir nginxtest cd nginxtest/ echo nginx s running!!! >> index.html vi Dockerfile编辑dockerfile文件内容 FROM almalinux:latest MAINTAINER "smartaiops<smar…...

docke容器版Nessus登录+破解+激活+特征库更新

docke容器版Nessus登录+破解+激活+特征库更新 安装Nessus docker run -itd --name=ramisec_nessus -p 8834:8834 ramisec/nessus 重置账号密码1. 进入容器 docker exec -it ramisec_nessus bash2. 查看用户 /opt/nessus/sbin/nessuscli lsuser3. 修改指定用户的密码(以admin为…...

我把Cursor当磁盘清理工具用,非常棒! - ukyo-

我来帮您删除这个Colima虚拟磁盘镜像文件: [2 tools called] ✅ **文件删除成功!** **文件信息**:- **文件名**: basedisk- **位置**: ~/.colima/_lima/colima/- **大小**: 456MB- **类型**: Colima 虚拟磁盘镜像文件 **释放的磁盘空间**: **456MB** **删除后的影响**:- Co…...

vue项目

新建文件夹,然后用vscode打开这个文件然后在终端新建vue文件...

第九篇:数据库服务克隆应用

数据库克隆概念介绍 在数据库MySQL 8.0(8.0.17+)版本中,引入了数据库的克隆功能,主要是借助clone-plugin实现的,是对数据页底层克隆; 克隆的数据是InnoDB存储引擎中的物理快照信息,包括schemas, tables, tablespaces, and data dictionary metadata; 在数据库中出现克隆…...

Anti-Proxy Attendance 题解

CF1924F 题解题目传送门:CF1924F 还是第一次见这种势能题。 先把交互库的回答转成 \(0,1\) 表示答案是否在这个区间中。 首先把题目转化一下,对每个位置 \(i\) 维护一个 01 串 \(S_i\) 表示:如果 \(i\) 是答案,那么当前交互库的每个回答是否是真话。即如果当前询问 \([l,r]…...

【2024-2025第二学期】助教工作总结

一、助教工作的具体职责和任务 路由交换技术的助教的具体职责在于课前配合老师发布预习任务,在同学预习存在困难时给予问题解答;课中主要帮助同学解决实验遇到的卡壳问题,帮助同学们更快更全面的掌握实验内容和相应的理论知识;课后批改同学的作业、实验报告,并且对课中未完…...

开始每小时记录日程

每小时记录一次做的事,公开 20250914_155401 看b站视频,吃东西...

5【鸿蒙/OpenHarmony/NDK】使用Node-API进行异步任务开发

各位码友们好!今天这篇干货主要聚焦实操细节,希望能帮大家少踩坑。​ 要是过程中遇到哪块没看懂、有疑问,或者你有更优的实现思路,评论区尽管聊!发现文档里有疏漏或错误也尽管指出来 —— 技术这东西就得互相挑刺才能越磨越精,咱们一起把这些知识点吃透~是什么?与同步处…...

控制器指令

cpu中有控制器和运算器 这里就要开始学控制器 指令 指令分为两个部分: 操作码 做什么事情 地址码 对谁做 当cpu检测到操作码为000110的时候,就要执行停机操作 指令是计算机的最小功能单位 计算机智能执行自己指令系统中的指令,不能执行其他系统的指令 比如说inter芯片一般都…...

题解:AT_abc421_c [ABC421C] Alternated

题面 思路 似乎有很多大神用类似逆序对的方法 \(O(n\log n)\) 通过了此题,不过此题是有贪心 \(O(n)\) 做法的。 我们可以从结果推导,每一个 A 和 B 都相邻的情况只有两种:AB...AB 和 BA...BA,以下称这两个结果串为 \(t\),题目给出的串为 \(s\)。 考虑怎样使得其消耗代价最…...

MySQL数据库:SQL数据类型

SQL数据类型 数值类型 字符类型 时间日期类型...

Ubuntu 安装

太好了!系统已经安装完成了! 您现在看到的是安装成功的最终界面。这意味着所有步骤,包括分区、复制文件、安装更新和配置引导程序,都已全部顺利完成。您现在有两个选择:立即重启 (推荐)点击这个按钮,计算机将会重启。重启后,它会从硬盘启动,您将进入刚刚安装好的全新 U…...

幼等数论

整除 T1-1. Propose that \(m > n \geqslant 0\), Prove that \( (2{2n} + 1) \mid (2{2m} - 1) \) . Since we have:\[x^n - y^n = (x - y)(x^{n-1} + x^{n-2}y + \cdots + xy^{n-2} + y^{n-1})\] Therefore, we can rewrite:\[ 2{2m} - 1 = (2{2{n+1}}){2{m-n-1}} - 1{2{…...

搭建rocketmq的三主三从遇到的坑

1、机器配置cat /etc/hosts 192.168.224.128 worker1 192.168.224.129 worker2 192.168.224.130 worker3 2、broker配置 128机器 a-master#所属集群名字,名字⼀样的节点就在同⼀个集群内 brokerClusterName=rocketmq-cluster #broker名字,名字⼀样的节点就是⼀组主从节点。 …...

深入解析:轻松Linux-9.进程间通信

深入解析:轻松Linux-9.进程间通信pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; f…...

2025.9.14——1黄1绿

普及/提高- P2278 [HNOI2003] 操作系统 就是模拟,但是机房噪音太大调了好久…… 普及+/提高 P2233 [HNOI2002] 公交车路线 该说果然是老题吗……好简单的DP啊,应该只有黄的水平。...

Ubuntu 中改图片大小

在 Ubuntu 中,可以使用 ImageMagick 工具来调整图片的大小。ImageMagick 是一个强大的图像处理工具,支持多种图像格式和操作。 安装 ImageMagick 首先,您需要安装 ImageMagick。打开终端并输入以下命令: sudo apt-get install imagemagick使用 ImageMagick 缩放图片 安装完…...

认识眼图和眼图的参数

认识眼图 眼图(Eye Diagram)是用余辉方式累积叠加显示采集到的串行信号的比特位的结果,叠加后的图形形状看起来和眼睛很像,故名眼图。眼图的分析是数字系统信号完整性分析的关键之一。 眼图的形成 由于眼图是示波器用余辉方式将采集到的一系列串行信号的多个单位间隔(UI)…...

【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】 - 实践

【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New…...

【科研绘图系列】R语言绘制地图和散点图 - 指南

【科研绘图系列】R语言绘制地图和散点图 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !…...

Java NIO 学习小记

Java NIO 学习小记 :Buffer、Channel 与 Selector 在 Java 的 I/O 体系中,NIO(New Input/Output)是对传统 BIO(Blocking I/O)的优化。NIO 提供了更高效的 面向缓冲区、基于通道 的数据处理方式,并且通过 多路复用器(Selector) 实现了单线程处理多个连接的能力。本文简…...

扩展欧几里得算法求乘法逆元

之前学过用快速幂求逆元,条件是当模数 \(p\) 为质数的时候,\(a\) 的逆元就是 \(a^{p - 2}\)。 但相较于扩展欧几里得算法求逆元,适用的范围是比较小的,因为扩展欧几里得算法适用于所有逆元存在的情况。在以下的式子中,模数为 \(m\) 的情况下,\(x\) 就是 \(a\) 的逆元 \[a…...

redis实现缓存3-封装redis工具类

具体实现: CacheClient package com.hmdp.utils;import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.data.re…...

高阻态

高阻态高阻态(High Impedance State,简称 Hi-Z 或 Hi-Z State)是指电路中的某个输出引脚或信号处于一种“关闭”状态,既不提供电流,也不吸收电流。这个状态通常用于三态逻辑(Tri-state Logic)系统中,目的是让该引脚既不会对电路中的其他部分产生影响,也不会消耗功率。…...

鸿蒙应用开发从入门到实战(四):ArkTS 语言概述

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。​ 大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,欢迎关注! 一…...

命令模式的深度解析:从标准实现到TPL Dataflow高性能架构

命令模式是对一类对象公共操作的抽象,它们具有相同的方法签名,所以具有类似的操作,可以被抽象出来,成为一个抽象的命令对象。实际操作的调用者就不是和一组对象打交道,它是需要以来这个命令对象的方法签名,并根据这个签名调用相关的方法。 以上是命令模式的大概含义,这里…...

ORA-01555系列:二、ORA-01555的场景分析与解决方案

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本章将深入探讨ORA-01555的四种核心触发场景,为每种场景提供两个详细的…...

PySimpleGUI常用控件

PySimpleGUI常用控件序号 控件类型 控件函数1 文本控件 1-1:sg.Text() 或者 sg.T()1-2:sg.Input() 或 sg.In() 或 sg.InputText()(文本输入框)1-3:sg.Listbox()(多行列表文本框)1-4:sg.Multiline()(大文本框)2 按键控件 2-1:sg.Button() 或 sg.B()(按键)2-2:sg.E…...

202312_QQ_DNS流量

流量分析,DNS流量,pysharkTags:流量分析,DNS流量,pyshark 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202312_QQ_packet1.zip 小张发现公司某台服务器被入侵,经过在服务器上抓包后得到流量文件,请帮忙分…...

读书笔记:为什么数据在磁盘上的存放顺序如此重要?

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

Rcc_APBPeriphClockCmd()

Rcc_APBPeriphClockCmd()启用时钟后,外设能工作,而禁用时钟时外设无法工作的原因,主要是因为 时钟系统 是微控制器中控制所有硬件模块运行的基础。外设时钟负责为外设提供必要的运行时钟信号,没有时钟信号,外设就无法进行正常的操作。下面是一些具体的原因: 1. 时钟是外设…...