Codeforces Round 970 (Div. 3) A~F

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

A.Sakurako’s Exam (思维)

题意:

SakurakoSakurakoSakurako有一场数学考试。老师给了一个数组,由 aaa个 1 和 bbb个 2 组成。

在数组中,SakurakoSakurakoSakurako必须在每个元素前面放置一个 + 或 -,以使数组中所有元素的总和等于 000。

SakurakoSakurakoSakurako不确定是否有可能解决这个问题,因此确定是否有办法分配符号,使得数组中所有元素的总和等于 000。

分析:

当a,ba,ba,b都为偶数时候,一定可以使得和为000。只需要对半符号相反即可。当aaa为偶数,bbb可以是奇数也可以是偶数。例如1 1 2符合条件,1 1 2 2也符合条件。当aaa是奇数个时,不满足题意。当a,ba,ba,b其中一个为000时,另外一个要为偶数个。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 998244353;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        int a, b;
        cin >> a >> b;
        if (a == 0)
        {
            if (b % 2)
                cout << "NO" << endl;
            else
                cout << "YES" << endl;
        }
        else if (b == 0)
        {
            if (a % 2)
                cout << "NO" << endl;
            else
                cout << "YES" << endl;
        }
        else if (a % 2)
            cout << "NO" << endl;
        else
            cout << "YES" << endl;
    }
    return 0;
}

B.Square or Not (思维)

题意:

精美的二进制矩阵是边缘为111而内部为000的矩阵。 SakurakoSakurakoSakurako有一个大小为 r×cr \times cr×c的精美二进制矩阵,并通过写下矩阵的所有行(从第一行开始到第 rrr行结束)创建了一个二进制字符串 sss。换句话说,矩阵中第 iii行和 jjj列的元素对应于字符串的第 ((i−1)∗c+j)((i-1)*c+j)((i−1)∗c+j)个元素。 现在你需要检查字符串 sss所构造的矩阵是不是正方形。

分析:

首先考虑读入的字符串长度是否能构造成正方形,其次因为矩阵的外围为111,中间为000,遍历到 时(i,j)(i,j)(i,j),看字符串对应位置i×n+ji \times \sqrt{n} + ji×n​+j的字符是否为对应字符即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 998244353;
void solve()
{
    int n;
    string s;
    cin >> n >> s;
    int m = sqrt(n);
    if (m * m != n)
    {
        cout << "No" << endl;
        return;
    }
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < m; j++)
        {
            char c = '0';
            if (!i || !j || i == m - 1 || j == m - 1)
                c = '1';
            if (s[i * m + j] != c)
            {
                cout << "No" << endl;
                return;
            }
        }
    }
    cout << "Yes" << endl;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

C. Longest Good Array (贪心)

题意:

SakurakoSakurakoSakurako正在研究数组。长度为 nnn的数组 aaa被认为是好的,当且仅当:

  • 数组 aaa是递增的,并且对于所有 2≤i≤n2 \le i \le n2≤i≤n都是 a_i−1<a_ia\_{i - 1} < a\_ia_i−1<a_i;

  • 相邻元素之间的差异是递增的,意味着对于所有 2≤i<n2 \le i < n2≤i<n都是 a_i−a_i−1<a_i+1−a_ia\_i - a\_{i-1} < a\_{i+1} - a\_ia_i−a_i−1<a_i+1−a_i。

SakurakoSakurakoSakurako已经确定了 lll和 rrr,并希望构造一个长度最大的好数组,其中对于所有 a_ia\_ia_i都是 l≤a_i≤rl \le a\_i \le rl≤a_i≤r。

帮助 SakurakoSakurakoSakurako找到给定 lll和 rrr的好数组的最大长度。

分析:

我们贪心的考虑这个问题,让差值每次递增111,例如l,l+1,l+3,l+6l,l+1,l+3,l+6l,l+1,l+3,l+6这样进行构造,再二分答案能构造的最大长度即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 998244353;
void solve()
{
    LL L, R;
    cin >> L >> R;
    LL l = 0, r = R;
    while (l < r)
    {
        LL mid = l + r + 1 >> 1;
        LL sum = (1 + mid) * mid / 2;
        if (L + sum <= R)
            l = mid;
        else
            r = mid - 1;
    }
    cout << r + 1 << endl;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

D. Sakurako’s Hobby (枚举)

题意:

对于某个排列 ppp,SakurakoSakurakoSakurako规定整数 jjj可以通过 iii到达,当且仅当可以通过进行若干次 i=p_ii=p\_ii=p_i的操作 ,使 iii等于 jjj。

如果是 p=[3,5,6,1,2,4]p=[3,5,6,1,2,4]p=[3,5,6,1,2,4],那么例如, 444可以从 111到达,因为: i=1i=1i=1→\rightarrow→i=p_1=3i=p\_1=3i=p_1=3→\rightarrow→i=p_3=6i=p\_3=6i=p_3=6→\rightarrow→i=p_6=4i=p\_6=4i=p_6=4。现在为 i=4i=4i=4,因此 444可从 111到达。

排列中的每个数字都被涂成黑色或白色。

SakurakoSakurakoSakurako将函数 F(i)F(i)F(i)定义为可从 iii到达的黑色整数的数量。

请计算出每个 1≤i≤n1\le i\le n1≤i≤n的 F(i)F(i)F(i)的值。

分析:

考虑到题目给出的是排列,那么所有元素在按照规则遍历时,会出现环状结构(最后到达本身),这个环上的所有元素 F(i)F(i)F(i)都相等。我们逐个循环枚举就可以求出所有的F(i)F(i)F(i)。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 998244353;
void solve()
{
    LL n;
    cin >> n;
    LL p[n + 1] = {0}, b[n + 1] = {0};
    int us[n + 1] = {0};
    for (int i = 1; i <= n; i++)
    {
        cin >> p[i];
    }
    string s;
    cin >> s;
    for (int i = 1; i <= n; i++)
    {
        if (us[i])
            continue;
        int sz = 0;
        while (!us[i])
        {
            us[i] = 1;
            sz += s[i - 1] == '0';
            i = p[i];
        }
        while (us[i] != 2)
        {
            b[i] = sz;
            us[i] = 2;
            i = p[i];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        cout << b[i] << " ";
    }
    cout << endl;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

E. Alternating String (dp)

题意:

SakurakoSakurakoSakurako非常喜欢交替字符串。如果偶数位置上的字符相同,奇数位置上的字符相同,并且字符串的长度为偶数,她将小写拉丁字母的字符串 sss称为交替字符串。

例如,字符串 abab 和 gg 是交替的,而字符串 aba 和 ggwp 则不是。

现在,你可以对字符串执行两种类型的操作:

  1. 选择一个索引 iii,并从字符串中删除第 iii个字符,这将使字符串的长度减少 111。这种类型的操作最多只能执行 111次;

  2. 选择索引 iii,并将 s_is\_is_i替换为任何其他字母。

给出使字符串变为交替字符串所需的最少操作数。

分析:

因为只能删除一次字符,所以长度为奇数时才考虑删除。我们令num[i][j]num[i][j]num[i][j]表示奇数位或者偶数位,各种字符出现的次数。当nnn为偶数时,分别找到奇数位与偶数位出现最多字符的次数,这些字符保持不变。那么有ans=n−max(num_0,num_0+25)−max(num_1,num_1+25);ans=n-max(num\_0,num\_0+25)-max(num\_1,num\_1+25);ans=n−max(num_0,num_0+25)−max(num_1,num_1+25);。当nnn为奇数时,我们只要遍历1−n1-n1−n,表示删除该字符后的操作次数,最终去最小值即可。 我们再令tmp[i][j]tmp[i][j]tmp[i][j]表示在当前位置上各个字符出现的次数,再令cnt[i][j]cnt[i][j]cnt[i][j]表示删除该位置上字符后整个字符串上奇偶字符数。那么有cnt[0][j]=tmp[0][j]+num[1][j]−tmp[1][j]cnt[0][j]=tmp[0][j]+num[1][j]-tmp[1][j]cnt[0][j]=tmp[0][j]+num[1][j]−tmp[1][j]。cnt[1][j]=tmp[1][j]+num[0][j]−tmp[0][j]cnt[1][j]=tmp[1][j]+num[0][j]-tmp[0][j]cnt[1][j]=tmp[1][j]+num[0][j]−tmp[0][j]。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 998244353;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        string s;
        cin >> s;
        int ans = n;
        int cnt[2][26]{};
        for (int i = 0; i < n; i++)
        {
            cnt[i % 2][s[i] - 'a']++;
        }
        if (n % 2 == 0)
        {
            ans = ans - *max_element(cnt[0], cnt[0] + 26) - *max_element(cnt[1], cnt[1] + 26);
        }
        for (int i = n - 1; i >= 0; i--)
        {
            cnt[i % 2][s[i] - 'a']--;
            if (n % 2)
            {
                ans = min(ans, n - *max_element(cnt[0], cnt[0] + 26) - *max_element(cnt[1], cnt[1] + 26));
            }
            cnt[(i + 1) % 2][s[i] - 'a']++;
        }
        cout << ans << endl;
    }
    return 0;
}

F. Sakurako’s Box (数学)

题意:

SakurakoSakurakoSakurako有一个装有 nnn个球的盒子。每个球都有其价值。她想和朋友打赌,朋友能否从盒子中随机挑选两个球(可能是两个不同的球,但它们的价值可能相同),它们的价值乘积将与 SakurakoSakurakoSakurako猜测的数字相同。 现在你要帮他找出数组中两个元素乘积的期望值。 可以证明期望值的形式为 PQ\frac{P}{Q}QP​,其中 PPP和 QQQ为非负整数,并且为 Q≠0Q \ne 0Q=0。输出 P⋅Q−1( mod 109+7)P \cdot Q^{-1}(\bmod 10^9+7)P⋅Q−1(mod109+7)的值。

分析:

数组中数对的数量为C_n2=n∗(n−1)2C\_n^2 = \frac{n*(n-1)}{2}C_n2=2n∗(n−1)​,所有数对的乘积和为sum=∑_i=2n∑_j=1i−1a_j∗a_isum = \sum\_{i=2}^n \sum\_{j=1}^{i-1}a\_j*a\_isum=∑_i=2n∑_j=1i−1a_j∗a_i,那么期望值就是sumC2_n\frac{sum}{C^2\_{n}}C2_nsum​。我们再用前缀和进行优化,令f(i)=∑_j=1ia_if(i) = \sum\_{j=1}^i a\_if(i)=∑_j=1ia_i,sum=∑_i=2na_i∗∑_j=1i−1a_j=∑_i=2na_i∗f(i−1)sum=\sum\_{i=2}^n a\_i *\sum\_{j=1}^{i-1}a\_j = \sum\_{i=2}^n a\_i * f(i-1)sum=∑_i=2na_i∗∑_j=1i−1a_j=∑_i=2na_i∗f(i−1)。再用快速幂算出逆元进行计算即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define endl '\n'
#define PII pair<LL, LL>
const int N = 3e5 + 10;
const int InF = 2e9 + 5;
const int mod = 1e9 + 7;
LL qmi(LL a, int b)
{
    LL res = 1;
    while (b)
    {
        if (b & 1)
            res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        LL n;
        cin >> n;
        LL pre = 0, sum = 0;
        for (int i = 1; i <= n; i++)
        {
            LL x;
            cin >> x;
            if (i > 1)
            {
                (sum += pre * x % mod) %= mod;
            }
            (pre += x) %= mod;
        }
        LL ans = sum * qmi(n * (n - 1) % mod * qmi(2, mod - 2) % mod, mod - 2) % mod;
        cout << ans << endl;
    }
    return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

IAR安装成功的关键:STM32设备支持文件导入方法 IAR安装常卡在设备支持缺失这一步——尤其对STM32新手,没导入对应芯片包,编译直接报错。实测发现,必须通过IAR的Tools→Options→IDE→Configuration→Device Support手动加载STM32设备支持文件,否则新建工程时连芯片型号都选不到。IAR安装是否顺利,往往就差这一步。 阅读详情

相关推荐

芯片良率提升:从设计到制造的系统性工程实践

在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率

weixin_42526068的博客 632

Codeforces Round 970 (Div. 3)(A~F)

因为删除操作只能进行一次,所以n为奇数时,必须执行一次删除操作,n为偶数时,则不用删除,如果判断此时奇偶为数量最多的字母即可,我们要做的就是将奇欧位全部字母变成数量最多的字母需要的操作数即可,更新最小值。当1为奇数和2为奇数时,1是的数量小于2时输出NO,反之输出YES。n必须是平方数,然后模拟一下,中间全部是0即可。就是从i位置出发,经过的位置有多少为0,并查集。这数据范围,感觉这题比第一题简单。

2301_80314483的博客 740

手把手教你用单结晶体管搭建简易振荡电路(含电路图和波形分析)

本文详细介绍了如何使用单结晶体管(UJT)搭建简易振荡电路,包括电路设计、波形分析和实战技巧。通过具体的电路图和参数计算,帮助电子爱好者和工程师快速掌握UJT振荡器的设计与调试方法,适用于脉冲信号生成和时钟源制作等应用场景。

weixin_29207533的博客 516

Codeforces Round 970

Codeforces Round 970

青少年趣味编程 726

别再只会regress了!用Stata的csdid命令搞定多期DID的完整实操指南

本文详细介绍了如何在Stata中使用csdid命令进行多期DID分析,解决传统DID方法在交错处理场景下的局限性。通过完整的实操指南,包括环境搭建、核心语法、结果解读和高阶应用,帮助研究者更准确地评估政策效果,适用于计量经济学和实证研究领域。

weixin_30236595的博客 582

网络抓包实战:如何捕获与解析802.1Q VLAN标签报文

在网络通信中,数据包是信息传输的基本单元,而VLAN(虚拟局域网)技术通过在数据链路层插入802.1Q标签,实现了网络流量的逻辑隔离与高效管理。其核心原理是在标准以太网帧头中嵌入4字节的VLAN标识,使交换机能够根据VID(VLAN ID)进行精准转发。掌握VLAN报文的捕获与解析技术,对于网络故障排查、安全审计和性能优化具有重要价值,尤其在需要验证网络隔离策略或诊断Trunk链路异常时。本文聚焦于使用Wireshark工具,结合端口镜像等实操方法,详细演示如何抓取并解读携带802.1Q标签的原始报文,帮助

weixin_33417488的博客 382

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

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

Mysssone的博客 201

从SD更新字库到FLASH,再用LCD显示

用Flash当字库存储载体。思路是先将要用到的字库文件存在SD卡,然后存储到Flash,LCD显示时候从Flash中读取 还挺顺利的,移植的原子的程序,自己稍加修改,主要是我的液晶屏函数,Flash读写函数,还有存储文件的flash地址不一样。一晚上搞定,大小字体都OK。挺高兴哈哈。这几天忙工作事情有点耽搁了学习进展嘿嘿 在text.c的showstr函数中char的字体颜色随意设置的,可以显...

weixin_30505751的博客 914

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

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

wuqingyigexiaoba的博客 309

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1037

【tio-websocket】15、学习tio的第1步—tio-study

tio-study 是用于学习 t-io 的示范工程,tio-study 是入门 t-io 最好的方式!tio-study 工程演示的是一个典型的 TCP 长连接应用工程,分为 server(服务端) 和 client(客户端) 工程,server 和 client 共用 common(公共模块) 工程

JACKAL 1万+

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 571

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2465

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 748

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 82

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 217

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 178

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 349

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 152

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 42

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 399

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 181
上一篇: AtCoder Beginner Contest 370
下一篇: Codeforces Round 972 (Div. 2) A~E
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值