Codeforces Round 915(Div.2) A~F

LVGL v8.3 图片显示与解码缓存实战:PNG 上屏、C 数组与文件双方案 LVGL v8.3 图片两种存储方式、PNG/JPG 上屏解码器挂载、LV_IMG_CACHE_DEF_SIZE 缓存调优、手动预解码头像有效性判断,及"缓存被动画清空"真实踩坑。 阅读详情

A.Constructive Problems(思维)

题意:

给出一个n×mn \times mn×m的网格,你需要将网格上所有点均填满水,当一个格子同时满足以下两个条件时,格子中也会被填满水:

  1. 该格子的左边或右边已经被填满水了

  2. 该格子的上面或下面已经被填满水了

一次操作可以给一个格子填满水,问至少几次操作才能将所有网格填满。

分析:

分析样例后可以发现,对于一个n×mn \times mn×m的网格,每行/列均只需要包含一个被填满水的格子就能保证所有格子中均被水覆盖,即答案为max(n,m)max(n, m)max(n,m)。

填充方案如下图:

代码:

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, m;
    cin >> n >> m;
    cout << max(n, m) << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

B.Begginer’s Zelda(思维)

题意:

给出一棵树,你可以继续若干次以下操作:

  • 选择两个点uuu和vvv

  • 然后将uuu到vvv之间的所有点删除(包括u,vu,vu,v),然后添加一个新的点代替原本的所有点,并连接原本所有点连着的边。

问至少需要多少次操作,才能使树上只剩下一个节点?

分析:

观察样例后可以发现,每次选择两个不同链上的叶节点,删除他们到达根节点的边,此时,由于叶节点所在的链被删除了,那么删除后不会产生新的叶节点,即树上的叶节点数量会减少222(当树上至少还包含444个叶节点时,如果树上只包含333个叶节点,不难发现删除后只会减少一个叶节点)。

那么,如果总叶结点数量为kkk,将叶节点删除到只剩222需要的次数为⌊(k−1)/2⌋\lfloor(k - 1) / 2\rfloor⌊(k−1)/2⌋,然后,只剩两个叶节点的树实际上就是一条链,此时再进行一次操作就能将树变为一个节点,因此,答案为⌊(k−1)/2+1⌋=⌊(k+1)/2⌋\lfloor(k - 1) / 2 + 1\rfloor = \lfloor(k + 1) / 2\rfloor⌊(k−1)/2+1⌋=⌊(k+1)/2⌋。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5e2;

int n, ans;
vector<int> G[N];

void dfs(int root, int pre) {
    int len = G[root].size();
    if (len == 1) ans++;
    for (int i = 0; i < len; i++) {
        int v = G[root][i];
        if (v == pre) continue;
        dfs(v, root);
    }
}

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) G[i].clear();
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    ans = 0;
    dfs(1, -1);
    cout << (ans + 1) / 2 << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

C.Largest Subsequence(贪心)

题意:

给出一个长度为nnn的字符串sss,字符串中仅包含小写字母,你可以进行若干次以下操作:

  • 选择字符串sss中的字典序最大的子序列ttt,并将该子序列向右旋转一次,即将t1t2...tmt_1t_2...t_mt1​t2​...tm​变为tmt1t2...tm−1t_mt_1t_2...t_{m - 1}tm​t1​t2​...tm−1​

问:最少操作几次可以使得该字符串被排序成增序,如果无法完成排序,输出−1-1−1.

分析:

不难发现,由于每次右移相当于在子序列中将最后的元素删除,那么操作后子序列仍然是字典序最大的,实际上能进行操作的始终是同一个字符串。

那么,只需要对该子序列进行排序,然后检查字符串排序后整个字符串sss是否有序,如果有序,输出操作前字典序最大的子序列中包含的所有字符数量减去最大字符的数量(排序执行到最大元素到最后位置就结束了,因此该子序列中所有最大的元素是不需要操作次数的)。

否则,输出−1-1−1

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5e2;

vector<int> V[30];

void solve() {
    int n;
    string s;
    cin >> n >> s;
    for (int i = 0; i < 26; i++) V[i].clear();
    for (int i = 0; i < n; i++) {
        V[s[i] - 'a'].push_back(i);
    }
    int start_pos = -1, cnt = 0;
    vector<int> p;
    for (int i = 25; i >= 0; i--) {
        int pos = lower_bound(V[i].begin(), V[i].end(), start_pos) - V[i].begin();
        int len = V[i].size();
        if (pos >= len) continue;
        if (cnt == 0) cnt = V[i].size();
        for (int j = pos; j < len; j++) {
            p.push_back(V[i][j]);
        }
        start_pos = *(--p.end());
    }
    int len = p.size();
    for (int i = 0, j = len - 1; i < j; i++, j--) {
        swap(s[p[i]], s[p[j]]);
    }
    for (int i = 1; i < n; i++) {
        if (s[i] < s[i - 1]) {
            cout << "-1" << endl;
            return;
        }
    }
    cout << p.size() - cnt << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

D.Cyclic MEX(单调栈)

题意:

对于数组aaa,定义其代价为∑i=1nmex†([a1,a2,…,ai])\sum_{i=1}^{n}mex†([a_1,a_2,…,a_i])∑i=1n​mex†([a1​,a2​,…,ai​])。

给定集合{0,1,2,…,n−1}\left\{0,1,2,…,n−1\right\}{0,1,2,…,n−1}的一个排列‡p‡p‡p,求ppp所有循环移位的最大代价。

†mex([b1,b2,…,bm])†mex([b_1,b_2,…,b_m])†mex([b1​,b2​,…,bm​])是不存在于b1,b2,…,bmb_1,b_2,…,b_mb1​,b2​,…,bm​中的最小非负整数xxx。

排列‡A‡A‡A{0,1,2,…,n−1}\left\{0,1,2,…,n−1\right\}{0,1,2,…,n−1}是由nnn个元素组成的数组
,包含从000到n−1n−1n−1的任意顺序的不同整数。例如,[1,2,0,4,3][1,2,0,4,3][1,2,0,4,3]是一个排列,但[0,1,1][0,1,1][0,1,1]不是一个排列(111在数组中出现两次),[0,2,3][0,2,3][0,2,3]也不是一个排列(n=3n=3n=3,但数组中有333)。

分析:

对于本题目,不妨先想一个最简单的情况:000在数组的最后一个位置,那么显然除了最后一个位置的前缀mexmexmex是nnn,其他所有位置的前缀mexmexmex都是000。

一个一个地把当前数组的第一个数字移动到最后面,观察一下这会对所有nnn个位置的前缀mexmexmex造成什么影响:

假设某一次移动的数字是xxx,设fif_ifi​为移动前数组前缀[1,i][1,i][1,i]的mexmexmex值,对于所有满足fi>xf_i>xfi​>x的iii,我们将xxx移动到后面之后,xxx便不会存在于这些前缀里面了,因此它们的fif_ifi​会变为xxx。

对于满足 fi<xf_i < xfi​<x 的iii,将xxx移动到后面之后不会对它们造成影响。

模拟一下上述的过程就会发现这是一个类似单调栈的形式,维护一个单调栈,放入(值,值对应的一段区间的最右位置)。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL n,id,a[3000005];

int main() {
    ios::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
    int t;
    cin>>t;
    while(t--){
        cin>>n;
        id=0;
        for(LL i=1;i<=n;++i){
            cin>>a[i];
            a[i+n]=a[i+2*n]=a[i];
        }
        for(LL i=n+1;i<=2*n;++i)
            if(a[i]==0)
                id=i;
        LL sum,ans;
        sum=ans=n;
        map<LL,LL>cnt;
        ++cnt[n];
        for(LL i=id-n+1,j=1;j<=n-1;++i,++j){
            while((*cnt.rbegin()).first>a[i]){
                LL x=(*cnt.rbegin()).first,c=(*cnt.rbegin()).second;
                cnt.erase(x),sum-=c*x;
                cnt[a[i]]+=c,sum+=c*a[i];
            }
            sum+=n,++cnt[n],ans=max(ans,sum);
        }
        cout<<ans<<endl;
    }
    return 0;
}

E.One-X(树形DP)

题意:

线段树是一种树,其中每个节点代表一个区间并具有其编号。通过递归可以使用一个包含n个元素的数组构建一个线段树。假设函数build(v,l,r)build(v,l,r)build(v,l,r),作用是构建以编号vvv为根节点,包含区间[l,r][l,r][l,r]的线段树。

现在让我们定义build(v,l,r)build(v,l,r)build(v,l,r):

  • 如果l=rl=rl=r,则该节点vvv是叶子节点,停止添加更多边。
  • 否则,添加边(v,2v)(v,2v)(v,2v)和(v,2v+1)(v,2v+1)(v,2v+1)。让m=⌊l+r2⌋m=⌊l+r2⌋m=⌊l+r2⌋。然后调用build(2v,l,m)build(2v,l,m)build(2v,l,m)和build(2v+1,m+1,r)build(2v+1,m+1,r)build(2v+1,m+1,r)。

因此,整棵树通过调用build(1,1,n)build(1,1,n)build(1,1,n)来构建。

现在将为具有nnn个元素的数组构造一个线段树,计算lca†(S)lca†(S)lca†(S)的总和,其中SSS是非空叶子节点的集合。题目保证恰好有2n−12n−12n−1个可能的子集合。由于这个总和可能非常大,输出它模998244353998244353998244353的结果。

lca†(S)lca†(S)lca†(S)是SSS中节点的最小公共祖先数目。

分析:

尝试递推来缩小规模,考虑一个结点,编号为XXX,其作为LCALCALCA产生的总和为 X⋅(2左子树区间长度−1)⋅(2右子树区间长度−1)X⋅(2^{左子树区间长度}−1)⋅(2^{右子树区间长度}−1)X⋅(2左子树区间长度−1)⋅(2右子树区间长度−1)。那么对于一个子树SSS其内部所有节点产生的总和,只跟这个子树的区间长度和子树的根节点有关。那么对于一棵区间长度为LLL的子树,可以用kkk和bbb表示,当这个子树的根节点值为xxx时整个子树的LCALCALCA总和为kx+bkx+bkx+b。

对一个区间长度为LLL的子树,可以通过其两个子树的kkk和bbb得到其自身的kkk和bbb,计算过程如下:

{k=2kl+2kr+(2左子树区间长度−1)⋅(2右子树区间长度−1)b=bl+br+kl\begin{cases} k=2k_l+2k_r+(2^\text{左子树区间长度}−1)⋅(2^\text{右子树区间长度}−1) \\ b=b_l+b_r+k_l \end{cases}{k=2kl​+2kr​+(2左子树区间长度−1)⋅(2右子树区间长度−1)b=bl​+br​+kl​​

线段树有一个性质是,若总区间长度为nnn,对于第xxx层(设根节点为第000层),节点的区间长度一定是⌊n2x⌋⌊\frac{n}{2^x}⌋⌊2xn​⌋和⌈n2x⌉⌈\frac{n}{2^x}⌉⌈2xn​⌉中的一个,因此一个这样的线段树最多可产生2log⁡2n2\log_2n2log2​n个不同的(k,b)(k,b)(k,b)数对。

代码:

#include<bits/stdc++.h>

using namespace std;
const int MOD = 998244353;
typedef long long LL;

struct s1 {
    LL k, b;

    s1(LL k1 = 0, LL b1 = 0) : k(k1), b(b1) {}

    LL operator()(LL x) {
        return (k * x + b) % MOD;
    }

    s1 operator+(s1 tmp) {
        return s1((k + tmp.k) % MOD, (b + tmp.b) % MOD);
    }
};

map<LL, s1> m1;

LL pow_mod(LL a, LL b) {
    b %= MOD - 1;
    LL ret = 1;
    while (b) {
        if (b & 1) ret = (ret * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return ret;
}

s1 solve(LL n) {
    if (n == 1)
        return s1(1, 0);
    if (m1.count(n))
        return m1[n];
    LL mid = n >> 1;
    s1 resl = solve(n - mid);
    s1 resr = solve(mid);
    LL k = resl.k * 2 + resr.k * 2 + (pow_mod(2, n - mid) - 1) * (pow_mod(2, mid) - 1);
    LL b = resl.b + resr.b + resr.k;
    return m1[n] = s1((k % MOD + MOD) % MOD, b % MOD);
}

int main() {
    int T;
    LL n;
    cin >> T;
    while (T--) {
        cin >> n;
        cout << solve(n)(1) << endl;
    }
    return 0;
}

F.Field Should Not Be Empty(MAP+遍历)

题意:

给你一个长度为nnn的排列†p†p†p。

如果对于所有y<xy < xy<x,都满足py<pxp_y < p_xpy​<px​,并且对于所有y>xy>xy>x都满足py>pxp_y > p_xpy​>px​,认为称点xxx是好数。本题定义f(p)f(p)f(p)为ppp中好数的个数。

可以执行以下操作:选择两个不同的值iii和jjj,并交换元素pip_ipi​和pjp_jpj​。

应用上述操作一次,求f(p)f(p)f(p)的最大值。

长度为nnn的排列†A†A†A是指由nnn个不同的整数1−n1-n1−n组成的数组,每个数字位置随机。例如,[2,3,1,5,4][2,3,1,5,4][2,3,1,5,4]是一个排列,但[1,2,2][1,2,2][1,2,2]不是一个排列(222在数组中出现两次),[1,3,4][1,3,4][1,3,4]也不是一个排列(n=3n=3n=3,但数组中有444)。

分析:

一个点是好数的条件就是ai=ia_i=iai​=i,且小于其的数都在其左侧,大于其的数都在其右侧。

首先如果已经是有序排列了,那么答案是n−2n-2n−2,需要特判这种情况。

对于本题,执行把一个小的数交换到大的数后面去的操作,这不会使f(p)f(p)f(p)变得更大,所以不会执行。同理,把一个大的数放到后面去不会使f(p)f(p)f(p)变得更小,所以最初是好数的点操作完仍然还是好数。

本题只能交换一次,其实可以发现选择是有限的。我们会进行的操作,其结果只有两种可能

  • 操作ai,aa_i,aai​,a,会让ai,aa_i,aai​,a中间的某个位置变成好数
  • 操作ai,aa_i,aai​,a,会让ai,aa_i,aai​,a其中某个点本身变成好数

对于某个点,如果已经满足ai=ia_i=iai​=i,我们看一下它的前面有多少个数大于它,如果没有,那么已经满足要求,如果有一个,可以找到需要交换的位置,记录下来,否则不可能在一次操作内让这个点变成好数,忽略即可。

所以,可能对f(p)f(p)f(p)产生贡献的位置对,只有2∗n2*n2∗n个,暴力检查这2∗n2*n2∗n个,算出贡献改变量即可。

统计一下序列中已经是好数的位置,计这个个数是cntcntcnt

  1. 如果所有位置都归位,那么交换会损失两个,也就是cnt−2cnt-2cnt−2

  2. 至少有一个没归位的。如果交换一个归位的和一个没归位的,相邻就会只损失一个位置,答案至少为cnt−1cnt-1cnt−1。在本题中,没归位的是成对出现的,并且一定存在没归位的两个位置是逆序的(假设都是正序的,那么就都归位了,矛盾)。交换这两个逆序位置,cntcntcnt不变,所以答案可以取到cntcntcnt

  3. 当交换(x,y)(x<y)(x,y)(x < y)(x,y)(x<y)两个位置时,[1,x−1][1,x-1][1,x−1]的位置不受影响,[y+1,n][y+1,n][y+1,n]的位置不会受影响。由前文分析得px>pyp_x>p_ypx​>py​一定成立。考虑[x+1,y−1][x+1,y-1][x+1,y−1]这个区间里的位置iii,在(x,y)(x,y)(x,y)交换前,是没有好数的,因为若将(i,pi)(i,p_i)(i,pi​)看成是二维平面点的时候,左侧的点都在左下方,右侧的点都在右上方,也就意味着,当iii左侧的值和iii右侧的值没有形成逆序对时,才会出现好数,而pxp_xpx​和pyp_ypy​是一对逆序对,所以没有好数位置。

枚举所有可能增加的位置对,将对应贡献加上,共有2∗n2*n2∗n种情况,遍历取最大值即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

int main() {
    int t;
    cin>>t;
    
    while(t--){
        int n;
        cin>>n;
        vector<int> p(n),invp(n);
        for(int i=0;i<n;i++) {
            cin>>p[i];
            p[i]--;
            invp[p[i]] = i;
        } 
        vector<array<int, 2>>pre(n, {-1, -1}),suf(n, {n, n});
        for (int i=1;i<n;i++) {
            pre[i]=pre[i-1];
            int x=p[i-1];
            for(int j=0;j<2;j++) {
                if(x>pre[i][j]) {
                    swap(x,pre[i][j]);
                }
            }
        }
        for (int i=n-2;i>=0;i--) {
            suf[i]=suf[i+1];
            int x=p[i+1];
            for (int j=0;j<2;j++) {
                if(x<suf[i][j]) {
                    swap(x, suf[i][j]);
                }
            }
        }
    
        vector<int>bad(n);
        int cnt=0;
        int ans=0;
        map<pair<int, int>, int> mp;
        for(int i=0;i<n;i++) {
            if (p[i]==i) {
                if(pre[i][0] < i && suf[i][0] > i){
                    bad[i] = 1;
                    cnt += 1;
                } 
                else if (pre[i][1] < i && suf[i][1] > i) {
                    mp[{invp[pre[i][0]], invp[suf[i][0]]}] += 1;
                }
            } 
            else if (invp[i] < i) {
                if (suf[i][0] > i && pre[i][0] == i) {//i值向后换
                    mp[{invp[i], i}] += 1;
                }
            }
            else {
                if (suf[i][0] == i && pre[i][0] < i) {//i值向前换
                    mp[{i, invp[i]}] += 1;
                }
            }
        }
        ans = cnt - 2;
        if (cnt < n) {
            ans = cnt;
        }
        for(auto [s, c] : mp) {//换(s_x,s_y]能增加c个归位的,换一对(x,y),x以左y以右不会受到影响,但是会减少[bad[x],bad[y]]个归位的
            auto[x, y]=s;
            ans=max(ans, cnt + c);
        }
        cout<<ans<<"\n";
    }
    return 0;
}

学习交流

以下为学习交流QQ群,群号: 546235402,每周题解完成后都会转发到群中,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

esp8266步进电机驱动控制 blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) Arduino uno的板子的程序 esp8266板子接入到Arduino uno的控制引脚上的5,6,7 esp8266程序 //****库***** #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_PRINT Serial //串口协议库 #include <Blinker.h&gt 阅读详情

相关推荐

Xilinx VU+系列多DIE FPGA时序约束与跨DIE信号优化策略

本文深入探讨了Xilinx VU+系列多DIE FPGA的时序约束与跨DIE信号优化策略。针对2.5D/3D封装技术带来的时序挑战,详细解析了SLR区域约束、Laguna寄存器配置及跨时钟域约束等关键技术,提供了实用的TCL脚本和RTL优化示例,帮助开发者有效提升设计性能和时序收敛效率。

weixin_29209801的博客 654

Codeforces Round 915 (Div. 2)

思路:首先是选择词性最大的子序列,即字典序最大,我们需要考虑的是整个序列最大的字符所处的位置,当该字符移动到最后时,若序列仍不是最小序列则不可能通过该操作达成最小序列,因为最大字符为首的子序列词性一定是最大的,而不是一个字符串越长词性越大,当其移动到最后时整个字符串无法继续进行操作(选择一个字符循环操作无意义)。题意:在一颗无向图的树中,可以进行一次塞尔达操作,每次操作选择任意两个顶点,然后将连接两顶点间的点包括俩顶点全部压缩为一点,之前连接这些点的子节点全部直接连接压缩后的新节点。

maisui12138的博客 337

Fluent温度超限调试:从能量方程到网格优化的实战指南

本文深入解析Fluent中温度超限问题的诊断与解决方法,从能量方程机制到网格优化策略,提供实战指南。通过分析温度与焓的换算关系,探讨典型场景如能量方程发散、局部网格质量差等,并给出五步调试法及高级命令应用,帮助工程师有效解决温度计算异常问题。

weixin_29045585的博客 530

Codeforces Round 915 (Div. 2)(A~C)

坐牢一个半小时...D、E待补(太菜了,做的题还是太少了)思路:手画一下发现:n个城市最多能重建n * n 的城市,所以n * m 需要重建max(n , m)个城市。

weixin_61825750的博客 699

SAP开发实战:用FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本(附完整ABAP代码)

本文详细介绍了如何使用SAP的FI_DOCUMENT_CHANGE BAPI批量修改FB03凭证抬头和行项目文本,提供完整的ABAP代码实现方案。通过该BAPI,开发者可以高效完成财务凭证的批量修改,确保数据一致性和审计合规性,显著提升SAP财务模块的运维效率。

weixin_29224589的博客 381

服务器测试之网卡性能调优

nvidia下载mlnx_ofed:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/intel下载驱动固件:https://www.intel.com/content/www/us/en/download-center/home.html。然而,你可以根据实际情况手动调整中断相关配置。老生常谈了,一些性能相关的设置项打开,节能的关闭,虚拟化相关的VMX/SR-IOV/IOMMU最好也都关掉。

qq_41897488的博客 4907

Codeforces Round 915 (Div. 2) B & C

贪心的想,每次操作一定会选择两个叶子结点,两个叶子结点会进行一次操作,并且其他的叶子结点不会被影响到,接着处理其他的叶子结点。故统计叶子节点个数即可,可统计度为1的点。给定一个字符串和一种操作,每次操作找该字符串字典序最大的子序列,将子序列向右循环移动一个单位,问最后是否可以得到一个排好序的字符串,可以的话最少需要多少次操作。通过单调栈的方法得到字典序最大的子序列,此时该序列是倒序的,如果最后要排好序那么该序列最后一定会翻转过来,所以把翻转后的序列填回原来的位置,判断一下是否排好序。

KyLen_Mou的博客 317

OpenCV函数用法之calibrateCamera

参考链接:opencv中标定函数calibrateCamera_ychl87的专栏-优快云博客 世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下: 其中(X,Y,Z)为世界坐标系中的三维点; (u,v)为成像面坐标系中的二维点; A为相机的内参数矩阵:(cx,cy)为主光轴点,一般为图像的中心;fx和fy为焦距; [R|t]为相机的外参数矩阵:R为旋转矩阵,t为位移矩阵; 上述公式的简单推理过程如下 考虑到镜头畸变 其中,k1,k2,k3,k4,k5和k6为径向畸变,p1和.

tiger&sheep的博客 3万+

Codeforces Round 936

Codeforces Round 936

青少年趣味编程 995

欧姆龙多PLC串行链接模式的应用

欧姆龙多PLC串行链接模式的应用 一、如何将两台CP1H进行串行PLC连接(PLC串行链接) 主机侧设定 从机侧设定 二、 如何实现编程通信 主机侧的【PC连接模式】为【全部】的时候 ① 主机会把自己的地址从3100开始,按照【链接字】设定的字数个数发送到每个从机的3100开始进行存储。 ② 从机会把自己的地址从31n0开始,按照主机侧参数【链接字】设定的字数个数发送到主机的31n0开始进行存储。 注:(n为从机的地址号,若从机号不连续,则该编号的地址将不被定义..

u014202847的博客 3087

Adams Car——Adams car与Simulink联合仿真

Adams与simulink悬架联合仿真

Mr.邹的博客 2125

Codeforces Round 916

Codeforces Round 916

青少年趣味编程 1116

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2748

Codeforces Round 914 (Div. 2)(A~E)

思路:定1求1,将所有能打到国王的棋子位置求出,看是否能打到王后。

weixin_61825750的博客 780

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Codeforces Round 915 (Div. 2) (D 单调栈优化mex E数学)

那么mex的变化就是当前数组从后往前第一个比x小的数的位置 到 当i-1的位置的mex都是x。然后除了栈里面的字母都是不能移动的,把栈里面字母排序后按顺序放回去,判断字符串是否有序即可。往右移,直接去掉最小的那个,最大的依然没变,剩下一个字母为最大的时候,只能移动这个。如果已经确定了某个子串的最大的,那么这个子串右移,这个子串仍然是最大的。比如把2移动到最后,那么1到5这个位置的mex都是2了,最小次数就是栈长度减去开头的字母连续的长度。因为最大子串肯定是从头到尾是单调递减的。注意2的位置的mex是n。

qq_61657632的博客 704

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【每日一题】—— C. Largest Subsequence(Codeforces Round 915 (Div. 2))(规律、字符串处理)

【每日一题】—— C. Largest Subsequence(Codeforces Round 915 (Div. 2))(规律、字符串处理)

PH_modest的博客 1150

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Codeforces Round 915 (Div. 2) A-F(补题&补写法)

即一棵大小为n的根id=1的树,变为大小为n的根id=2的树(或变为根id=3的树)时,称一个位置x是good的,当且仅当所有ypx,其实就是,将(x,px)看成是二维平面点的时候,左侧的点都在左下方,右侧的点都在右上方。所以,可能产生贡献的位置对,只有2*n个,暴力检查这2*n个,能快速算贡献改变量即可。因为,将(i,pi)看成是二维平面点的时候,左侧的点都在左下方,右侧的点都在右上方,即x/2上取整,x/2下取整,(x-1)/2上取整,(x-1)/2下取整,

小衣同学的博客 3074

codeforces C. Largest Subsequence

优先队列 + 思维

wyzz_yz的博客 943

Codeforces Round 915 (Div. 2) C. Largest Subsequence样例解释

【代码】Codeforces Round 915 (Div. 2) C题样例解释。

JK01WYX的博客 541

Codeforces Round 915 (Div. 2) D. Cyclic MEX 模拟、单调队列

故而,用一个单调队列存入所有位置的mex值,选择向左循环位移,每次取出队首,再从对尾向前扫,若有mex值大于移除的队首的值则更改其为所移除队首的值,最后再向对位加入mex值n(对尾的mex只会是n)。mex[a1,a2,...,an]的值是单调不减的,比如a1的mex值为p(即p为最小的不等于a1的非负整数),而下一个数a2的mex值即为不等于a1,a2的最小的非负整数,若a2==p,则其mex值将增大,若a2!给定一个长度为 n (1

2301_80099230的博客 621

Codeforces Round 915 (Div. 2) D. Cyclic MEX

Codeforces Round 915 (Div. 2) D. Cyclic MEX

madtry的博客 734

Codeforces Round 915 (Div. 2) D. Cyclic MEX 单调栈,特殊情况入手

the smallest non-negative integer does not occur这种题

JK01WYX的博客 669

static 的三种用法:C 语言里一个关键字的三张面孔

本文系统讲解 C 语言中 static 关键字的三种用法:修饰局部变量延长生命周期、修饰全局变量与函数限制作用域到本文件。通过一个包含三个文件的完整工程示例对照演示,并从存储期、作用域与链接性三个属性解释其统一原理,最后补充单元测试框架偏爱 static 函数的工程实践。

大模型全栈工程师 · Thanks_ks 313

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 200

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 309
上一篇: Educational Codeforces Round 160 (Div. 2) A~E
下一篇: Codeforces Round 916(Div.3) A~G
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值