HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)(A,B,C,D,E,F,G)

看不懂的英文,题意很难理解,这场还是有点难度的。

C需要处理,D是不太明显的dijikstra,E是线段树优化dp,F是个不好想的线段树,主席树应该也能做。

我觉得讲的很好的宝藏up主->B站视频讲解。之后会比较忙,一篇上万字的题解太费时间了,之后的题解可能就没办法大段大段的来讲了,只说重点。


A Yay!

题意:

长度大于等于3的字符串里只有两种字符,其中一种字符只出现了一次,找到它的位置。

思路:

我的思路:
如果我们事先知道只出现一次的那个字符是什么,就可以直接用string里内置的 find_first_of() 函数来找位置,或者知道另一种字符,就可以用string里内置的 find_first_not_of() 函数来找位置。

字符串第一个字符一定属于两种字符之一,假设出现了一次的字符为a,出现多次的字符为b。分类讨论:

  1. 如果第一个字符是a,find_first_of(str[0],1) 会返回 string::npos ,这时第一个字符就是a
  2. 如果第一个字符是b,find_first_of(str[0],1) 会返回一个合法位置,这时直接 find_first_not_of(str[0],1) 就能找到a了

jiangly大佬的思路:
使用string内置的 count(str[0]) 函数,如果个数大于1就是b字符,如果个数为1就是a字符

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;string str;int main(){cin>>str;if(str.find_first_of(str[0],1)==string::npos)cout<<1;else cout<<str.find_first_not_of(str[0])+1;return 0;
}

B - Which is ahead?

题意:

N N N 个人排成一队,每个人有个编号 P i P_i Pi。有 Q Q Q 次询问,每次询问给出两个编号 A i A_i Ai B i B_i Bi,输出靠前的那个人的编号。

思路:

对每个编号记录它在队列中的位置,之后拿到编号直接查询位置。

code:

#include <iostream>
#include <cstdio>
using namespace std; 
const int maxn=105;int n,idx[maxn],q;int main(){cin>>n;for(int i=1,t;i<=n;i++){cin>>t;idx[t]=i;}cin>>q;for(int i=1,a,b;i<=q;i++){cin>>a>>b;printf("%d\n",(idx[a]>idx[b])?b:a);}return 0;
}

C - Many Replacement

题意:

给你一个长为 N N N 的小写字母组成的字符串 S S S。有 Q Q Q 次询问,每次询问给出两个小写字母 c i , d i c_i,d_i ci,di ,表示将字符串中所有 c i c_i ci 字符换成 d i d_i di。问最后得到的字符串是什么。

思路1:

但是发现对每种字符,我们只关心它最后变成了哪种字符,因此用map记录一下这个字符最后变成了什么就行了,也就是这个字符最后映射为什么字符。

更详细的说,一开始每个字符都映射为自己,每次修改把所有映射值为 c i c_i ci 的键值对改成映射为 d i d_i di,最后把原字符串映射一下就行了。时间复杂度 O ( 26 ∗ q ∗ l o g ( 26 ) + n ∗ l o g ( 26 ) ) O(26*q*log(26)+n*log(26)) O(26qlog(26)+nlog(26))

code1:

#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <cstring>
using namespace std;int n,q;
string str;
map<char,char> mp;
vector<int> a[30];
int c;int main(){cin>>n>>str;for(char ch='a';ch<='z';ch++)mp[ch]=ch;cin>>q;for(int i=1;i<=q;i++){char c1,c2;cin>>c1>>c2;for(char ch='a';ch<='z';ch++)if(mp[ch]==c1)mp[ch]=c2;}for(auto x:str)printf("%c",mp[x]);return 0;
}

思路2:

赛时丑陋的想法。

把每个字符看成一个人,它一开始有把仓库钥匙,仓库里的货物就是原字符串填有这个字符的所有位置。每次进行字符修改的时候,就像把钥匙给了别人,不用动货物。

听着挺直观的,但是不好写。

code2:

#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <cstring>
using namespace std;int n,q;
string str;
map<char,int> mp;
vector<int> a[30];
int c;int main(){cin>>n>>str;for(int i=0;i<n;i++){if(mp.find(str[i])==mp.end())mp[str[i]]=++c;a[mp[str[i]]].push_back(i);}cin>>q;for(int i=1;i<=q;i++){char t1,t2;int n1,n2;cin>>t1>>t2;if(mp.find(t1)==mp.end() || t1==t2)continue;if(mp.find(t2)==mp.end())mp[t2]=mp[t1];else {n1=mp[t1];n2=mp[t2];a[n2].insert(a[n2].end(),a[n1].begin(),a[n1].end());a[n1].clear();}mp.erase(t1);}for(auto x:mp){for(auto idx:a[x.second]){str[idx]=x.first;}}cout<<str;return 0;
}

D - Square Pair

题意:

给你有 N N N非负数的数组 A A A,找到有多少对 ( i , j ) (i,j) (i,j) 满足 1 ≤ i < j ≤ N 1\le i<j\le N 1i<jN A i ∗ B j 是平方数 A_i*B_j是平方数 AiBj是平方数

能用非负数的平方表示的非负数就是平方数。

思路:

对平方数进行质因数分解,它的所有质因子的次数都是偶数(这样正好可以对半分),如果两个数乘起来是平方数,那么它们含有的一种质因子的次数的奇偶性一定相同的。我们的任务就是 l o g n logn logn 次内对一个 i i i,统计前面 i − 1 i-1 i1 个数中满足和这个数每个质因子的次数的奇偶性相同的数的个数。

因为我们只关心奇偶性,所以可以把多余次数的质因数全部去掉,每个奇数次数的质因数只留下一个就行了,比如 108 = 2 ∗ 2 ∗ 3 ∗ 3 ∗ 3 108=2*2*3*3*3 108=22333,去重后得到 3 3 3。对处理后的数存入map中就可以 logn 次查询了。

不过要特判 0 0 0 的情况,因为 0 0 0 可以和其他任何数产生有效的一对。如果 0 0 0 的个数有 n u m num num 个,那么答案会多出 n u m ∗ ( n − 1 ) num*(n-1) num(n1),不过 0 和其他 0 会重复算,再减去 n u m ∗ ( n u m − 1 ) / 2 num*(num-1)/2 num(num1)/2。边读数边算边特判也可以。

code:

#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
const int maxn=2e5+5;int n;int g(int x){int ans=1;for(int i=2;i*i<=x;i++){if(x%i==0){int cnt=0;while(x%i==0)x/=i,cnt++;if(cnt&1)ans*=i;}}if(x>1)ans*=x;return ans;
}int main(){cin>>n;long long num=0,ans=0;map<int,long long> mp;for(int i=1,t,x;i<=n;i++){cin>>t;if(t==0){num++;continue;}x=g(t);ans+=mp[x];mp[x]++;}cout<<ans+num*(n-1)-num*(num-1)/2<<endl;return 0;
} 

E - Last Train

题意:

N N N 个火车站, M M M 个火车信息。第 i i i 个火车信息有六个正整数 l i , d i , k i , c i , A i , B i l_i,d_i,k_i,c_i,A_i,B_i li,di,ki,ci,Ai,Bi,表示:

  • 在每个时刻 t = l i , l i + d i , l i + 2 ∗ d i , … , l i + ( k i − 1 ) ∗ d i t=l_i,l_i+d_i,l_i+2*d_i,\dots,l_i+(k_i-1)*d_i t=li,li+di,li+2di,,li+(ki1)di,都有一列火车从车站 A i A_i Ai 出发,并在时刻 t + c i t+c_i t+ci 到达车站 B i B_i Bi

问你从车站 i ( 1 ≤ i ≤ N − 1 ) i\quad (1\le i\le N-1) i(1iN1) 出发,到达车站 N N N 的最晚的出发时间是多少。

思路:

乍一看不好下手,不妨从终点站来看。

要出发时间最晚,那么我们到达终点站也会很晚。为了在路上留出足够充裕的时间,我们可以假定到达终点站坐的是最后一班车。

这样来考虑的话,我们逆推得到的这些车站也可以通过尽可能晚的车次来从其他车站到达。这样逆推到我们所在的车站,就得到了我们现在要出发的车站最晚可以什么时候走。而且我们一定不会回到已经经过的车站,否则我们再从这个车站出发的话,最晚时间就会变早。

我们每次挑出最晚时间出发的车站进行逆推,把更新的车站再依次进行逆推,其实就相当于在用dijkstra算法跑最短路。

详细的来说。我们一开始读入火车信息的时候反向建边,然后后终点 N N N 开始跑最短路。每次取出出发时刻最晚的车站,如果通过一条边(也就是一班车)可以到达一个点的时间变晚,就加入堆。

如何算出最晚车次是哪一次:假设现在所在的点的最晚时刻是 t m tm tm,那么有 l + ( x − 1 ) ∗ d + c ≤ t m l+(x-1)*d+c\le tm l+(x1)d+ctm x ≤ t m − l − c d + 1 x\le\frac{tm-l-c}{d}+1 xdtmlc+1 x = ⌊ t m − l − c d ⌋ + 1 ( 1 ≤ x ≤ k ) x=\left\lfloor\frac{tm-l-c}{d}\right\rfloor+1\quad(1\le x\le k) x=dtmlc+1(1xk)最后只要保证 x ≥ 1 x\ge 1 x1,然后 x x x x x x k k k 的较小值即可。发车时刻 l + ( x − 1 ) ∗ d + c l+(x-1)*d+c l+(x1)d+c 就是我们从目标车站的最晚出发时刻。

code:

#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
#define pii pair<ll,ll>
const int maxn=2e5+5;
const ll inf=2e18;int n,m;int head[maxn],cnt;
struct edge{int v,nxt;ll l,d,k,c;
}e[maxn];
void add(int u,int v,ll l,ll d,ll k,ll c){e[++cnt].v=v;e[cnt].l=l;e[cnt].d=d;e[cnt].k=k;e[cnt].c=c;e[cnt].nxt=head[u];head[u]=cnt;
}ll dis[maxn];
bool vis[maxn];
void dijkstra(){for(ll i=1;i<=n;i++)dis[i]=-inf,vis[i]=false;priority_queue<pii> h;dis[n]=inf;h.push(pii(dis[n],n));while(!h.empty()){int dt=h.top().first,u=h.top().second;h.pop();if(vis[u])continue;else vis[u]=true;for(ll i=head[u],v,l,d,k,c,ti,tm;i;i=e[i].nxt){v=e[i].v;l=e[i].l;d=e[i].d;k=e[i].k;c=e[i].c;ti=min(k,(dis[u]-c-l)/d+1);//坐哪一趟车 if(ti<1)continue;tm=l+(ti-1)*d;//发车时间if(dis[v]<tm){dis[v]=tm;h.push(pii(dis[v],v));} }}
}int main(){cin>>n>>m;for(ll i=1,l,d,k,c,a,b;i<=m;i++){cin>>l>>d>>k>>c>>a>>b;add(b,a,l,d,k,c);}dijkstra();for(int i=1;i<n;i++)if(dis[i]!=-inf)printf("%lld\n",dis[i]);else printf("Unreachable\n");return 0;
}

F - Black Jack

题意:

有一个 D D D 面骰子和两个变量 x , y x,y x,y,一开始 x = y = 0 x=y=0 x=y=0

你可以投若干次骰子,并把骰子的值加到 x x x 上。

然后庄家投若干次骰子,并把骰子的值加到 y y y 上。如果某次投骰子后 y > L y>L y>L,庄家就停止投骰子。

如果 x > N x>N x>N ,则你输。如果 x > y x>y x>y y > N y>N y>N 则你赢。两种情况都不是算你输(也就是 x , y > N x,y>N x,y>N

问你采取最大胜率的策略,胜率是多少。

思路:

jiangly的思路(写法不太一样):

当我们是某个点数的时候,我们可以选择投骰子或者不投。选择哪一个取决于哪个胜率更高。而庄家的策略始终不变,因此庄家投出的每种 y y y 的概率是固定的。

当我们选择投骰子时,那么假设 d p [ i ] dp[i] dp[i] 是我们当前点数为 i i i 时的胜率, 那么 d p [ i ] = ∑ k = i + 1 i + d d p [ k ] ∗ 1 d dp[i]=\sum_{k=i+1}^{i+d}dp[k]*\frac1d dp[i]=k=i+1i+ddp[k]d1 。如果我们选择不投骰子,假设 f [ i ] f[i] f[i] 表示庄家投出点数为 i i i 的概率,我们的胜率就是 ∑ y = L x − 1 f [ i ] + ∑ y = n + 1 l + d − 1 f [ i ] \sum_{y=L}^{x-1}f[i]+\sum_{y=n+1}^{l+d-1}f[i] y=Lx1f[i]+y=n+1l+d1f[i](后者表示庄家投出了比 n n n 大的点数,显然这时只要我们的点数不超过 n n n 就行)。两种选择取较大值就是 d p [ i ] dp[i] dp[i] 了。

f f f 数组需要预处理,当算到 f [ i ] f[i] f[i] 时,我们只需要算出前 d d d 个的值,这时可以边算 f f f 数组,边处理一个前缀和数组,这样就可以每次 O ( 1 ) O(1) O(1) 得到区间和,整个预处理过程是 O ( n ) O(n) O(n) 的。不过需要注意的是,庄家投骰子的策略是投到 y > = L y>=L y>=L 就立刻停止,因此前缀和只处理到前 0 ∼ L − 1 0\sim L-1 0L1 ,后面不再加入新 f [ i ] f[i] f[i] 值。 ∑ y = n + 1 l + d − 1 f [ i ] \sum_{y=n+1}^{l+d-1}f[i] y=n+1l+d1f[i] 这个东西也可以预先直接算出来。之后为了方便处理,我们再处理一个 g [ i ] g[i] g[i] 数组,表示我们投出点数为 i i i 时,庄家的败率(也就是我们选择停手的胜率)。

因为计算 d p dp dp 值时,我们需要后面 d d d 位的 d p dp dp 值,所以从后向前计算。

code:

WA3个点,精度损失严重。

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=4e5+5;int n,L,d;//上界为n下界为l,面数为d  
double f[maxn],g[maxn],s[maxn],lose;
double dp[maxn];int main(){cin>>n>>L>>d;s[0]=f[0]=1;for(int i=1,l,r;i<=n;i++){l=max(0,i-d);r=min(i-1,L-1);f[i]=(s[r]-((l>0)?s[l-1]:0))/d;//庄家投出i的概率 s[i]=s[i-1]+f[i];}for(int i=n+1,l,r;i<L+d;i++){//投出i点 l=max(0,i-d);r=L-1;lose+=(s[r]-((l>0)?s[l-1]:0))/d;}for(int i=0;i<L;i++)f[i]=0;f[0]=lose;for(int i=0;i<n;i++)g[i+1]=g[i]+f[i];//庄家败率 s[n+1]=0;for(int i=n,l,r;i>=0;i--){l=i+1;r=min(i+d,n);dp[i]=max(g[i],(s[l]-s[r+1])/d);s[i]=s[i+1]+dp[i]; }printf("%.15lf\n",dp[0]);return 0;
}

由于前缀和的精度损失比较严重,所以会WA掉三个点,因此采用线段树维护单点修改,区间和查询。

我前缀和调半天还WA三个点,改成线段树还T,而jiangly大佬直接一遍A了。。。

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=2e5+5;int n,L,d;//上界为n下界为l,面数为d  
double f[maxn],g[maxn],lose;
double dp[maxn];struct segement_tree{#define ls p<<1#define rs p<<1|1int n;struct Node{double val;}t[maxn<<2];void push_up(int p){t[p].val=t[ls].val+t[rs].val;}void print(int p,int l,int r){printf("%2d:[%2d,%2d] %lf\n",p,l,r,t[p].val);if(l==r)return;int mid=(l+r)>>1;print(ls,l,mid);print(rs,mid+1,r);}void print(){print(1,0,n);}void build(int p,int l,int r){if(l==r){t[p].val=0;return;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);push_up(p);}void build(int _n){n=_n;build(1,0,n);}void mdy(int p,int l,int r,int x,double val){if(l==r){t[p].val=val;return;}int mid=(l+r)>>1;if(x<=mid)mdy(ls,l,mid,x,val);else mdy(rs,mid+1,r,x,val);push_up(p);}inline void mdy(int id,double val){mdy(1,0,n,id,val);}double query(int p,int l,int r,int L,int R){if(L<=l && r<=R){return t[p].val;}int mid=(l+r)>>1;double ans=0;if(L<=mid)ans+=query(ls,l,mid,L,R);if(R>mid)ans+=query(rs,mid+1,r,L,R);return ans;}inline double query(int l,int r){return query(1,0,n,l,r);}#undef ls#undef rs
}tr;int main(){cin>>n>>L>>d;tr.build(n);f[0]=1;tr.mdy(0,f[0]);for(int i=1,l,r;i<=n;i++){l=max(0,i-d);r=min(i-1,L-1);f[i]=tr.query(l,r)/d;//庄家投出i的概率 tr.mdy(i,f[i]);}for(int i=n+1,l,r;i<L+d;i++){//投出i点 l=max(0,i-d);r=L-1;lose+=tr.query(l,r)/d;}for(int i=0;i<L;i++)f[i]=0;f[0]=lose;for(int i=0;i<n;i++)g[i+1]=g[i]+f[i];//庄家败率 for(int i=n,l,r;i>=0;i--){l=i+1;r=min(i+d,n);dp[i]=max(g[i],(l<=r)?tr.query(l,r)/d:0);tr.mdy(i,dp[i]);}printf("%.15lf\n",dp[0]);return 0;
}

G - Retroactive Range Chmax

题意:

给你有 N N N 个正整数的数组 A A A,有 Q Q Q 次操作,操作有三种:

  • 输入 1 l r x :将 A l , A l + 1 , … , A r A_l,A_{l+1},\dots,A_{r} Al,Al+1,,Ar 的每个数 A i A_i Ai 变成 m a x { A i , x } max\{A_i,x\} max{Ai,x}
  • 输入 2 i :将第 i i i 个操作撤销,保证第 i i i 个操作是第一种操作,并且之前没有被撤销过
  • 输入 3 i :查询 A i A_i Ai 的值。

思路:

借鉴这位大佬

相当于记录每个点所有可能的值,显然在某个时刻查询的时候,我们只要给出最大的那个就行了。但是直接暴力存储每个点的可能的值既会爆空间又会爆时间。因此用线段树维护,我们这里的值不需要 push_up 和 push_down 来维护,查询时只需要返回到达 A i A_i Ai 时线段树路径上的最大值就行了。

code:

基本相当于照抄了(汗

#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
const int maxn=2e5+5;int n,a[maxn];
int q;struct segement_tree{#define ls p<<1#define rs p<<1|1int n;struct Node{map<int,int> val;}t[maxn<<2];void build(int p,int l,int r){if(l==r){t[p].val[a[l]]++;return;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);}void build(int _n){n=_n;build(1,1,n);}void mdy(int p,int l,int r,int L,int R,int d,bool x){if(L<=l && r<=R){if(x){t[p].val[d]++;}else {if(--t[p].val[d]==0)t[p].val.erase(d);}return;}int mid=(l+r)>>1;if(L<=mid)mdy(ls,l,mid,L,R,d,x);if(R>mid)mdy(rs,mid+1,r,L,R,d,x);}int query(int p,int l,int r,int L,int R){if(L<=l && r<=R){return t[p].val.rbegin()->first;}int mid=(l+r)>>1,ans=0;if(!t[p].val.empty())ans=t[p].val.rbegin()->first;if(L<=mid)ans=max(ans,query(ls,l,mid,L,R));if(R>mid)ans=max(ans,query(rs,mid+1,r,L,R));return ans;}#undef ls#undef rs
}tr;struct opter{int l,r,d;
}opt[maxn];int main(){int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];tr.build(n);cin>>q;for(int i=1;i<=q;i++){int op;cin>>op;if(op==1){cin>>opt[i].l>>opt[i].r>>opt[i].d;tr.mdy(1,1,n,opt[i].l,opt[i].r,opt[i].d,1);}else if(op==2){cin>>opt[i].d;tr.mdy(1,1,n,opt[opt[i].d].l,opt[opt[i].d].r,opt[opt[i].d].d,0);}else {cin>>opt[i].d;cout<<tr.query(1,1,n,opt[i].d,opt[i].d)<<endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10 款数据恢复软件功能和有效性对比(2024 年更新)

数据丢失可能是一种痛苦的经历&#xff0c;无论是由于意外删除、硬件故障还是软件损坏。值得庆幸的是&#xff0c;数字时代带来了强大的数据恢复解决方案。 随着我们进入 2024 年&#xff0c;市场上充斥着旨在有效检索丢失数据的先进软件。在本文中&#xff0c;我们将探讨 2024…

Java WEB面试系列-02

1. Servlet 中如何获取 Session 对象? 使用HttpServletRequest对象的getSession方法获取session,通过getCookies获取Cookie。 2. Servlet 中过滤器有什么作用? Servlet监听器对特定的事件进行监听,当产生这些事件的时候,会执行监听器的代码。可以对应用的加载、卸载,对…

代码随想录 Leetcode494. 目标和

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; 思路&#xff1a;根据题意&#xff0c;设两个背包&#xff0c;packageA存放前面是""的数字之和&#xff0c;packageB存放前面是“-”的数字之和 则sum packageA packageB; target packageA - packag…

科普:哪几类人适合做人力RPO蓝海项目?

在当今竞争激烈的市场环境中&#xff0c;人力资源管理对于企业的重要性日益凸显。人办理RPO(招聘流程外包)作为一种新兴的服务模式&#xff0c;帮助企业优化招聘流程&#xff0c;提高招聘效率和质量。那么&#xff0c;哪几类人适合做人力RPO蓝海项目呢?本文将为大家详细总结一…

QT之项目经验(windows下的sqlite,c++开发)

目录 一、需要时间去磨练gui的调整和优化 1. 借鉴网上开源项目学习 2. gui的布局及调整是磨人的一件事情 3. gui的布局也是可以用组件复刻的 4. 耗时的设备树 二、多线程异步弹窗 三、定时任务动态变更设定 1.确定按钮触发 2.此处监听定时任务时间的改变 3.此处对改变做出具…

ClickHouse 指南(三)最佳实践 -- 跳数索引

Data Skipping Indexes Data Skipping Indexes 2 1、简介 影响ClickHouse查询性能的因素很多。在大多数情况下&#xff0c;关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此&#xff0c;选择适用于最常见查询模式的主键对于有效的表设计至关重要。 然…

k8s(5)

目录 使用Kubeadm安装k8s集群&#xff1a; 初始化操作&#xff1a; 每台主从节点&#xff1a; 升级内核&#xff1a; 所有节点安装docker &#xff1a; 所有节点安装kubeadm&#xff0c;kubelet和kubectl&#xff1a; 修改了 kubeadm-config.yaml&#xff0c;将其传输给…

k8s pv与pvc理解与实践

参考文章&#xff1a; https://blog.csdn.net/qq_41337034/article/details/117220475 一、 pv/pvc简述 Pv是指PersistentVolume&#xff0c;中文含义是持久化存储卷是对底层的共享存储的一种抽象&#xff0c;Pv由管理员进行配置和创建&#xff0c;只要包含存储能力&#xff…

iPhone利用文件管理器批量导出语音备忘录和照片到电脑

步骤1&#xff1a;使用文件服务器在 iPhone 和电脑间共享文件 参考文献&#xff1a;苹果官网操作指南 步骤1.1&#xff1a;iPhone上打开文件app&#xff0c;点击右上角三个点&#xff0c;选择“连接服务器” 步骤1.2&#xff1a;输入电脑的登录账号和密码 步骤1.3&#xff1a…

基于uniapp框架的古汉语学习考试系统 微信小程序python+java+node.js+php

1、一般用户的功能及权限 所谓一般用户就是指还没有注册的过客,他们可以浏览主页面上的信息。但如果需要其它操作时&#xff0c;要登录注册&#xff0c;只有注册成功才有的权限。 2、管理员的功能及权限 用户信息的添加和管理&#xff0c;古汉语信息加和管理和学习视频添加和管…

php脚本输出中文在浏览器中显示乱码

问题说明 这个问题一般出现在较低版本的php中&#xff0c;原因是php和浏览器的字符解析方式不对应 &#xff0c;导致中文字符被错误解析成乱码 &#xff08;注&#xff0c;此处的php版本任意切换是依赖于小皮面板&#xff08;phpstudy&#xff09;实现的&#xff0c;感兴趣可以…

websocket实现一个局域网在线摸鱼聊天室

1.思路 新建两个项目: 第一个前端项目,搭建聊天室页面,同时使用Websocket API,与服务端进行通信 第二个项目,使用node环境,下载ws包,搭建服务 年前就发现下包有问题,年后老淘宝镜像已经崩了,完全用不了,现在改https://registry.npmmirror.com 2.前端代码 <template>&…

初探HarmonyOS之ArkTs使用教程

ArkTs是HarmonyOS&#xff08;鸿蒙操作系统&#xff09;的官方应用开发语言&#xff0c;它结合了TypeScript的静态类型特性和JavaScript的动态特性&#xff0c;为开发者提供了高效、简洁且强大的编程体验。写这篇文章记录分享一下&#xff0c;简单带你了解ArkTs的基本使用&…

YOLOv5-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

支持国密ssl的curl编译和测试验证(上)

目录 1. 编译铜锁ssl库2. 编译nghttp2库3. 编译curl4. 验证4.1 查看版本信息4.2 验证国密ssl握手功能4.3 验证http2协议功能 以下以ubuntu 22.04环境为例进行编译 本次编译采用铜锁sslnghttp2curl&#xff0c;使得编译出来的curl可以支持国密ssl&#xff0c;并且可以支持http2…

在 Ubuntu 中, 使用 fsck 命令来修复磁盘文件系统

在 Ubuntu 中&#xff0c;可以使用 fsck 命令来修复磁盘文件系统。fsck 是用于检查和修复文件系统的工具。 使用 fsck 命令修复磁盘文件系统的步骤如下&#xff1a; 首先&#xff0c;您需要在命令行终端窗口中以 root 用户身份登录。 使用 fdisk -l 命令列出所有磁盘设备。 …

IDEA的LeetCode插件的设置

一、下载插件 选择点击File->Setting->Plugins&#xff1a;搜索LeetCode 二、打开这个插件 选择View —>Tool Windows—>leetcode 三、登陆自己的账号 关于下面几个参数的定义&#xff0c;官方给的是&#xff1a; Custom code template: 开启使用自定义模板&…

Springboot教程(二)——过滤器、拦截器

过滤器 过滤器可以在调用控制器方法之前进行一些操作&#xff0c;过滤器类一般放在filter包下。 配置类注册 使用过滤器时&#xff0c;要实现Filter接口&#xff0c;并重写doFilter方法&#xff1a; class TestFilter : Filter {override fun doFilter(request: ServletReq…

【Android 11】AOSP Settings WIFI随机MAC地址功能

AOSP Settings WIFI随机MAC地址功能 背景 最近客户提出了想要实现随机WIFIMAC地址的功能&#xff08;我们默认WIFI的MAC地址是固定的&#xff09;。网上搜到了一篇不错的文章&#xff0c;本次改动也是基于这个来写的。 由于客户指定使用的settings是AOSP的&#xff0c;所以在…

对数据结构的初步认识

前言: 牛牛开始更新数据结构的知识了.本专栏后续会分享用c语言实现顺序表,链表,二叉树,栈和队列,排序算法等相关知识,欢迎友友们互相学习,可以私信互相讨论哦! &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&a…