\(\large{Uptatete}\)

先放张图

这次是真的没想再改了,但是一到教室就又会怎么优化了

没必要每个点都让它和其他所有点判断一下,可以从上一个点加加减减啥的转过来

然后我就在昨天那个 \(n*n\) 代码的基础上,只让它把第一个点的值求出来,剩下用优化的思想从上一个点转移再加加减减确定最优值

点击查看答辩
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int inf=1e8;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
int main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
tb=c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
for(int i=1;i<=tb*2;i++)
q[i]=q[i-1]+b[i]-b[i-1]-1;
int res=0,cnt=0,zz=1;
while((cnt<res&&zz+1<=1+tb)||!res)
{
zz++;
if(cnt)
res=cnt;
cnt=0;
for(int j=2;j<zz;j++)
cnt+=q[j]-q[1];
for(int j=zz;j<1+tb;j++)
cnt+=q[1+tb]-q[j];
}
zz--;
ans=res;
int l=zz,r=tb-zz;
for(int i=2;i<=tb;i++)
{
res+=r*(q[zz+r+1]-q[zz+r])-(l-1)*(q[zz-l+2]-q[zz-l+1]);
l--,r++;
while(res-q[zz+r]+q[zz+1]+q[zz+1]-q[zz-l+1]<=res)
{
res=res-q[zz+r]+q[zz+1]+q[zz+1]-q[zz-l+1];
zz++,l++,r--;
}
//cout<<ans<<" "<<res<<" "<<l<<" "<<r<<"---\n";
ans=min(ans,res);
}
printf("%d\n",ans);
}
return 0;
}

发现一个点也过不了

再发现循环 i 次, i 一次也没用上,然后就看到其实 $zz-l+1==i $ $ zz+l=i+tb$

也就是 l,r 不仅啥也没优化到反而增加了思维复杂度

但是并没有什么质的改变,所以还是过不了

再看到自己昨天写的代码以 zz 作为分割点,i~zz-1 是一部分,zz~i+tb 是一部分

但是今天写的东西是建立在 zz 属于第一部分上的

改完就过了,,,

点击查看答辩
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int inf=1e8;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
int main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
tb=c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
q[1]=0;
for(int i=2;i<=tb*2;i++)
{
q[i]=q[i-1]+b[i]-b[i-1]-1;
// cout<<q[i]<<' ';
}
// cout<<endl;
int res=0,cnt=0,zz=1;
while((cnt<res&&zz<=tb)||!res)
{
zz++;
if(cnt)
res=cnt;
cnt=0;
for(int j=2;j<=zz;j++)
cnt+=q[j]-q[1];
for(int j=zz+1;j<1+tb;j++)
cnt+=q[1+tb]-q[j];
}
zz--;
ans=res;
// cout<<ans<<" "<<res<<" "<<zz<<"---\n";
for(int i=2;i<=tb;i++)
{
res+=(i+tb-zz-1)*(q[i+tb]-q[i+tb-1]);
res-=(zz-i+1)*(q[i]-q[i-1]);
while(res-q[i+tb]+q[zz+1]+q[zz+1]-q[i]<res&&zz<i+tb)
{
res=res-q[i+tb]+q[zz+1]+q[zz+1]-q[i];
zz++;
}
ans=min(ans,res);
}
printf("%d\n",ans);
}
return 0;
}

又是就过了 \(50pts\)

莫名其妙,真是让人摸不着头发

再再再再然后,发现没必要从第一个点的最优解开始转移

也就是说就不该留昨天的代码,哪怕只对一个点求也会 T 掉

删了就对了

,当然把最初始的状态加上,也不用管他是不是最优的 总不能转移空气吧

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+10;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
signed main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
tb=c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
q[1]=0;
for(int i=2;i<=tb*2;i++)
q[i]=q[i-1]+b[i]-b[i-1]-1;
int res=0,zz=1;
for(int i=2;i<=tb;i++)
res+=q[tb+1]-q[i];
ans=res;
for(int i=1;i<=tb;i++)
{
if(i!=1)
{
res+=(i+tb-zz-1)*(q[i+tb]-q[i+tb-1]);
res-=(zz-i+1)*(q[i]-q[i-1]);
}
while(res-q[i+tb]+q[zz+1]+q[zz+1]-q[i]<res&&zz<i+tb)
{
res=res-q[i+tb]+q[zz+1]+q[zz+1]-q[i];
zz++;
}
ans=min(ans,res);
}
printf("%lld\n",ans);
}
return 0;
}
小插曲
Huge:我觉得你们最近学习状态不错,找我调代码的都少了...

某人:老师有空帮忙看看我的代码呗

Huge:...调代码这件事吧,还得看你们自己,总不能考场上也让别人帮你调吧
(显然没有成功)

————————————————————————————————————————————————————————————————————————————————————————————————————————

\(\large{Uptated}\)

本来没有继续写t3的欲望了,但是昨天DZ说他改出来了,然后我就去再看了眼题解

当时想的是之前因为和题解思路不太一样,所以没仔细看,这回看到了关键字:二分、单调指针之类的

但是并不知道我的思路怎么二分

然后晚上回去想了5分钟就知道我赛时代码哪里假了

转化成链后,应该在两个点(相同的点)之间的剩下 \(n-1\) 个点上取离那两个点近的那一个

然后 二分||指针 的思路也就有了:

因为肯定是一边全向一边转,另一边相反,且下一个分割点貌似一定在这一个的右边

所以说 二分||指针 出那个分割点就好

顺便再想了会 Tarjan 的有向图,发现现在只会强连通分量了,想无向图想不出来刚打算睡觉的时候,被同学的呼噜轰炸了半个小时才睡着

今天本来上午最后一节公自就该来机房实现一下思路的,但是有俩山大的学长来宣传学校了,讲完已经上课了也没好意思再往外走

下午来机房后先花了3分钟改进了一下之前的代码,也就是对每一个点,只在链上同一个点中间计算离哪个近,发现能跑 \(50pts\) (记住这个数)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
int main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
tb=c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
for(int i=1;i<=tb*2;i++)
q[i]=q[i-1]+b[i]-b[i-1]-1;
ans=N<<5;
for(int i=1;i<=tb;i++)
{
int res=0;
for(int j=i+1;j<i+tb;j++)
res+=min(q[j]-q[i],q[i+tb]-q[j]);
ans=min(ans,res);
}
printf("%d\n",ans);
}
return 0;
}

然后就开始写优化

试了一下二分发现不太适合在这里用

然后就敲了一节课的单调指针,说实话真没想到能用这么久

反正最后过了,,,

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int inf=1e9;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
int main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
tb=c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
for(int i=1;i<=tb*2;i++)
q[i]=q[i-1]+b[i]-b[i-1]-1;
ans=inf;
int res,cnt,zz=1;
for(int i=1;i<=tb;i++)
{
cnt=res=0;
while((cnt<res&&zz+1<=i+tb)||!res)
{
zz++;
if(cnt)
res=cnt;
cnt=0;
for(int j=i+1;j<zz;j++)
cnt+=q[j]-q[i];
for(int j=zz;j<i+tb;j++)
cnt+=q[i+tb]-q[j];
}
zz-=2;
ans=min(ans,res);
}
printf("%d\n",ans);
}
return 0;
}

\(45pts\)

那正确性肯定没问题啊,问题出在哪呢

可以发现纠正完后的赛时代码时间复杂度是 \(n*n\) 的

但是我优化了一个单调指针之后,就成 \(n*n*log(n)\) 的了

最会优化的一集

咋最近这么能浪费时间啊

欸,好像想到咋优化了 (逃

事实证明并没有,哪位大佬知道我这思路咋优化,求教教

————————————————————————————————————————————————————————————————————————————————————————————————————————

昨天 \(Huge\) 说要给信奥的考场试,我以为我们仨不用考来着,一来机房,打开OJ,哦,ZJC比赛,妙啊,(话说为啥把我放在最后一个,虽然最后我考的也最烂就是了,下次一定要让他把我放在第一个

T1

题意:给一个字符串,第二个字符串是前一个字符串的前一半 + 一个字符,问 1 的前缀和 2 的后缀最多相等的个数

显然 \(KMP\) 板子题,,,但是我忘了

但是显然 \(hash\) 也能做,但是我忘了咋求字串的hash值了

那么怎么办呢

我把前一个字符串的所有可能情况都求了个hash值,甚至还没有直接一个一个比对跑得快

(因为答案最多就是第二个字符串的长度也就是第一个的一半)

,大概是因为kmp没打出来,然后急了

赛时代码 64pts
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
const int base=13331;
unsigned long long a[N],b[N];
int T,la,lb;
char ca[N],cb[N];
inline void Hash()
{
unsigned long long res;
for(int i=1;i<=la;i++)
{
res=0;
for(int j=i;j>=1;j--)
res=res*base+ca[j];
a[i]=res;
}
for(int i=1,j=lb;j>=1;i++,j--)
b[i]=b[i-1]*base+cb[j];
return ;
}
int main()
{
cin>>T;
while(T--)
{
scanf("%d%d",&la,&lb);
scanf("%s",ca+1);
for(int i=1;i<=lb;i++)
cb[i]=ca[i];
scanf("%c",&cb[++lb]);
while(cb[lb]<'a'||cb[lb]>'z')
scanf("%c",&cb[lb]);
Hash();
for(int i=lb;i>=0;i--)
{
if(a[i]==b[i])
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
赛后代码 100pts
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
const int base=13331;
unsigned long long a[N],b[N],p[N];
int T,la,lb;
char ca[N],cb[N];
inline void Hash()
{
unsigned long long res; for(int i=1;i<=lb;i++)
{
a[i]=a[i-1]*base+ca[i];
b[i]=b[i-1]*base+cb[i];
}
return ;
}
int main()
{
p[0]=1;
for(int i=1;i<=N;i++)
p[i]=p[i-1]*base;
cin>>T;
while(T--)
{
scanf("%d%d",&la,&lb);
scanf("%s",ca+1);
for(int i=1;i<=lb;i++)
cb[i]=ca[i];
scanf("%c",&cb[++lb]);
while(cb[lb]<'a'||cb[lb]>'z')
scanf("%c",&cb[lb]);
Hash();
int f=1;
for(int i=1,j=lb;i<=lb;i++,j--)
{
if(a[j]==b[lb]-b[i-1]*p[lb-i+1])
{
f=0;
printf("%d\n",j);
break;
}
}
if(f)
printf("0\n");
}
return 0;
} /*
2
5 3
adabc
d
6 6
aaaaaa
a
*/

T2

题意:\(Tarjan\) 求割点的板子

老师预料到我还记得tarjan咋敲,但是他没想到我根本没写无向tarjan的题

不过好的一点是我前两天看了dij求最小环的做法(我为啥要看这?),大概有 \(30pts\) 的思路,就是把每条边删了,再从1 \(dfs\) 到n 看看走不走得通

然后就出现了一点问题:

图是双向的,但是我单向删的边,所以还没图保证为树的特殊性质分高

如果你还感觉不太对劲的话,大概是我脑子抽了不知道为啥求割点要删边去判,反例随便就能举出来

最后特殊性质也忘了打了

赛时代码 5pts
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+10;
int T,n,m,tot,cnt,res,ans[N];
int head[N],nxt[N<<1],to[N<<1];
bool flag[N],f;
inline void add(int u,int v)
{
nxt[++tot]=head[u];
head[u]=tot;
to[tot]=v;
return ;
}
inline void dfs(int x)
{
flag[x]=true;
if(x==n)
f=1;
if(f)
return ;
int y;
for(int i=head[x];i;i=nxt[i])
{
y=to[i];
if(!flag[y])
dfs(y);
}
return ;
}
int main()
{
cin>>T;
while(T--)
{
for(int i=1;i<=n;i++)
head[i]=0;
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
int ne,t;
for(int i=2;i<n;i++)
{
for(int j=head[i];j;j=nxt[j])
{
ne=nxt[j],t=to[j];
nxt[j]=to[j]=0;
f=0;
dfs(1);
nxt[j]=ne,to[j]=t;
if(!f)
{
if(!ans[i])
res++;
if(!ans[t]&&t!=n&&t!=1)
res++;
ans[i]=ans[t]=1;
}
for(int k=1;k<=n;k++)
flag[k]=false;
}
}
printf("%d\n",res);
res=0;
for(int i=2;i<n;i++)
if(ans[i])
{
ans[i]=0;
printf("%d ",i);
}
ans[1]=ans[n]=0;
printf("\n");
}
return 0;
}
赛后代码 30pts(tarjan改天再说,特殊性质懒得打了)
#include<bits/stdc++.h>
using namespace std;
const int N=4e6+10;
int T,n,m,tot,cnt,res,ans[N];
int head[N],nxt[N<<1],to[N<<1];
bool flag[N],f;
inline void add(int u,int v)
{
nxt[++tot]=head[u];
head[u]=tot;
to[tot]=v;
return ;
}
inline void dfs(int x)
{
flag[x]=true;
if(x==n)
f=1;
if(f)
return ;
int y;
for(int i=head[x];i;i=nxt[i])
{
y=to[i];
if(!flag[y])
dfs(y);
}
return ;
}
int main()
{
cin>>T;
while(T--)
{
for(int i=1;i<=n;i++)
head[i]=0;
scanf("%d%d",&n,&m);
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
for(int i=2;i<n;i++)
{
flag[i]=1;
f=0;
dfs(1);
if(!f)
{
res++;
ans[i]=1;
}
for(int j=1;j<=n;j++)
flag[j]=0;
}
printf("%d\n",res);
res=0;
for(int i=2;i<n;i++)
if(ans[i])
{
ans[i]=0;
printf("%d ",i);
}
printf("\n");
}
return 0;
} /*
2
4 3
1 2
2 3
3 4
5 5
1 2
2 3
3 4
4 5
4 1
*/

update on 17:22 1/24

40 pts
#include<bits/stdc++.h>
using namespace std;
const int N=400100;
int T,n,m;
int head[11][N],nxt[11][N],to[11][N];
int low[11][N],dfn[11][N],flag[11][N];
int t=1,root,ans,mark[11][N],f[11][N],fa[11][N];
queue<int>q;
void add(int u,int v)
{
nxt[T][++t]=head[T][u];
head[T][u]=t;
to[T][t]=v;
}
void tarjan(int x)
{
if(x==n)
mark[T][x]=1;
low[T][x]=dfn[T][x]=++t;
int fl=0;
for(int i=head[T][x];i;i=nxt[T][i])
{
int y=to[T][i];
if(!dfn[T][y])
{
tarjan(y);
low[T][x]=min(low[T][x],low[T][y]);
if(low[T][y]>=dfn[T][x])
{
fl++;
if(x!=root||fl>1)
flag[T][x]=true;
}
}
else
low[T][x]=min(low[T][x],dfn[T][y]);
}
return ;
}
inline void bfs(int x)
{
queue<int>que;
que.push(x);
f[T][x]=1;
while(!que.empty())
{
x=que.front();
que.pop();
for(int i=head[T][x],y;i;i=nxt[T][i])
{
y=to[T][i];
if(f[T][y])
continue;
if(y==n)
{
while(x!=1)
{
mark[T][x]=1;
x=fa[T][x];
}
return ;
}
que.push(y);
f[T][y]=1;
fa[T][y]=x;
}
}
return ;
}
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
cin>>T;
while(T--)
{
t=root=ans=0;
cin>>n>>m;
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
if(u==v)
continue;
add(u,v);
add(v,u);
}
t=0;
for(int i=1;i<=n;i++)
if(!dfn[T][i])
{
root=i;
tarjan(i);
}
bfs(1);
for(int i=2;i<n;i++)
if(flag[T][i]&&mark[T][i])
{
ans++;
q.push(i);
}
cout<<ans<<'\n';
while(!q.empty())
{
printf("%d ",q.front());
q.pop();
}
printf("\n");
}
return 0;
}

T3

题意:两种颜色的寿司围成一个圈,每次移动相邻的两个,问最少多少次能让他们分开(形成两个连续的区域)

刚开始只有乱搞的思路,题目不知道为啥还疯狂暗示你这道题用数据结构(平衡树)

后来想到可以转换成链然后 前缀和 + 差分

想来会有很多问题,但没啥时间所以没想更优的做法

赛事+赛后代码 15pts(不会)
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int T,len,tb,ans;
int b[N],q[N];
char c[N];
int main()
{
cin>>T;
while(T--)
{
scanf("%s",c);
len=strlen(c);
for(int i=len;i>=1;i--)
c[i]=c[i-1];
c[0]=0;
for(int i=1;i<=len;i++)
if(c[i]=='R')
b[++tb]=i;
for(int i=tb+1;i<=tb*2;i++)
b[i]=b[i-tb]+len;
for(int i=1;i<=tb*2;i++)
q[i]=q[i-1]+b[i]-b[i-1]-1;
ans=N<<5;
for(int i=1;i<=tb*2;i++)
{
int res=0;
for(int j=1;j<=tb;j++)
{
if(j==i||j+tb==i)
continue;
res+=min(abs(q[j]-q[i]),abs(q[j+tb]-q[i]));
}
ans=min(ans,res);
}
printf("%d\n",ans);
}
return 0;
} /*
1
BBRBBRBBBRRR
*/

想象中的:

实际上的:

对了,走的时候被 \(Huge\) D了,让我期末考好一点,就当给期末攒 \(RP\) 了吧

顺便放上本次放假最大收获:

(可惜不知道为啥游戏里新皮肤两只眼睛跟长分家了一样,过活动的时候老难受了)

ZJC比赛的更多相关文章

  1. Livecoding.tv 现正举行iOS及Android App设计比赛

    近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...

  2. 为什么我如此热爱这样一个比赛(转自vici)

    为什么我如此的热爱这样一个比赛呢?因为它总能带给我一个目标,让我去努力实现它.因为可以看到胜利的希望,于是不断的去追逐.虽然其中的过程可能是比较艰辛的.   对于天才选手,作为天生的冠军,大概凭借天赋 ...

  3. HDU(1285)—确定比赛名次

    /*最近都在复习期末了...好久没做题,都快没智商了*/   有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...

  4. 白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现

    离去年“马尔可夫链进行彩票预测”已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会在后面的文章中逐步改 ...

  5. [BZOJ3139][HNOI2013] 比赛

    Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下:  (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各 ...

  6. hduoj 1285 确定比赛名次

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory ...

  7. 排球比赛计分规则(P205页)

    排球比赛计分规则: 1.SPEC的目标是什么?SPEC的目标不包括什么? 为了让大家更加了解排球比赛. 2.SPEC用户和典型场景是什么? 用户:运动员,观众,教练 场景:排球赛场 3.SPEC用到哪 ...

  8. HDU 1285 确定比赛排名 (数组实现 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    ...

  9. 确定比赛名次---HDU1285(拓扑排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来 分析: 本来我是用普通方法写的,然后就一直wa, ...

  10. 记录参加“牛津计划.Docker在线黑客松”比赛的过程

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

随机推荐

  1. PyCharm字体大小快捷键设置(“ctrl+滚轮”实现字体的随时放大和缩小)

    前言:我们在使用PyCharm工具编写Python代码的时候,希望能够随时放大缩小字体,而PyCharm默认是没有设置快捷键的,我们可以自己设置,下面就教大家如何设置. 分为两步设置: PyCharm ...

  2. SSL加密以及http和https的区别是什么

    SSL加密是建立在非对称加密算法的基础上的.非对称加密算法会产生一对长字符串,称为密钥对(公钥.私钥).数据使用公钥进行加密后, 唯一只能使用私钥才能解开.安装了服务器证书的网站,其实是把私钥保存在服 ...

  3. Android组件(菜鸟教程)

  4. 如在 Java 中分割 Excel 工作表

    前言 在Excel中创建的大多数商业报告不是单页的文档,而是包含了多个上下文相关的信息,这些信息被存储在多个工作表中.例如我们的一些地区销售报告.按部门分类的员工记录.每家店铺的库存清单等. 然而,随 ...

  5. 我把分布式音乐播放器适配了Stage模型

     OpenAtom OpenHarmony(以下简称"OpenHarmony")应用开发自API 8及其更早版本一直使用的是FA模型进行开发.FA模型是Feature Abilit ...

  6. Array and Set work process

    目录 Array work principle 分析Array操作步骤数 read find insert delete Set work principle 分析Set操作步骤数 read find ...

  7. 将py文件编译成pyc

    核心代码 import compileall compileall.compile_file("a.py", legacy=True, force=True) 演示步骤 1.新建 ...

  8. 双向链表的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 双向链表:拥有两个指针方向的链表 DoublyNode 结构: prev:指向上一个节点 value:节点值 next: ...

  9. HarmonyOS智能座舱体验是怎样炼成的?立即查看

    原文链接:https://mp.weixin.qq.com/s/AGY2hAeXngtRrZFk0FXe5g,点击链接查看更多技术内容: 随着AITO问界M5热卖以及M7.M5 EV版本的陆续交付,A ...

  10. 【原创】win11完美搭建macos13实现IOS自动化测试环境

    虚拟机完美搭建IOS自动化测试环境 一.win系统 1.1 安装虚拟机VM16 如果是macos系统请跳过 详细安装请看压缩包,私信可以提供安装包 1.2 VM解锁macOS 使用的是unlocker ...