AtCoder Beginner Contest 336 A~F

Atcoder Beginner Contest 336 (A - F 题) Atcoder Beginner Contest 336的A到F题讲解 阅读详情

A.Long Loong(格式输出)

题意:

给出一个正整数XXX,请你输出一个'L',然后XXX个'o',最后各输出一个'n'和'g'。

分析:

按要求输出即可。

代码:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

void solve() {
    int n;
    cin >> n;
    cout << 'L';
    for (int i = 0; i < n; i++) cout << 'o';
    cout << "ng" << endl;
}

int main() {
    solve();
    return 0;
}

B.CTZ(二进制)

题意:

给出一个正整数XXX,请你求出XXX在二进制下末尾有多少个连续的0。

分析:

循环除222直到输入的XXX变为奇数为止,循环的次数即为答案。

优化

直接使用函数计算答案,答案为log2lowbit(X)log_2^{lowbit(X)}log2lowbit(X)​

Tips:系统封装了库函数log2()log2()log2()可用于计算222为底数的对数,lowbitlowbitlowbit则需自己实现

代码:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

void solve() {
    int n;
    cin >> n;
    int ans = 0;
    while (n > 0 && n % 2 == 0) {
        ans++;
        n /= 2;
    }
    cout << ans << endl;
}

int main() {
    solve();
    return 0;
}

C.Even Digits(思维)

题意:

仅能使用0, 2, 4, 6, 8作为十进制上每一位数字的选择,问能组成的第NNN小的数字是多少(从小到大)。

分析:

不难发现,选择完最高位的数字后,假设后面还有mmm位十进制数字需要选择,此时的方案总数共5k5^{k}5k种。

那么,可以先找到最高位的数字是多少,即先计算出第一个满足(m+1)=5k≥N(m + 1) = 5^{k} \ge N(m+1)=5k≥N的mmm,然后将mmm作为除数依次计算得到每一位的数字即可。

代码:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

void solve() {
    ll n;
    cin >> n;
    n--;
    ll m = 5;
    while (m <= n) m *= 5;
    m /= 5;
    while (m > 0) {
        cout << (n / m) * 2;
        n %= m;
        m /= 5;
    }
    cout << endl;
}

int main() {
    solve();
    return 0;
}

D.Pyramid(DP)

题意:

金字塔定义:一个高度为kkk的金字塔序列共包含(2k−1)(2k - 1)(2k−1)个数字,且序列格式为:1,2,...,k−1,k,k−1,...,2,11, 2, ..., k - 1, k, k - 1, ..., 2, 11,2,...,k−1,k,k−1,...,2,1。

给出一个包含nnn个数字的序列A=(A1,A2,...,An)A = (A_1, A_2, ..., A_n)A=(A1​,A2​,...,An​),你可以进行若干次以下操作:

  • 选择一个序列中的数字,将该数字减少111

  • 移除序列开头或末尾的数字

问,能获得的所有金字塔序列中,高度最高的金字塔的高度是多少?

分析:

将金字塔序列从中心分成两半,使用pre[i],nxt[i]pre[i], nxt[i]pre[i],nxt[i]分别表示以第iii个数字作为金字塔中心,能组成的最长前半和后半序列的长度。

对于以第iii个数字作为金字塔中心,需要考虑两种情况:

  1. 前/后面序列构造的金字塔高度很小,那么当前中心点再高也只能通过减少高度到前/后面序列的最高高度加一。

  2. 前/后面序列构造的金字塔高度很大,那么只能通过删除前/后面部分数字,然后将接近中心的部分数字依次减少1,此时的金字塔高度即为当前数字。

依次计算得到pre,nxtpre, nxtpre,nxt数组,再枚举所有点为中心,此时选择第iii个数字为中心,能构造的最高金字塔高度即为min(pre[i],nxt[i])min(pre[i], nxt[i])min(pre[i],nxt[i]),记录所有能构造的金字塔中的最高高度即为答案。

代码:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 2e5 + 5e2;

int n, a[N], pre[N], nxt[N];

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        pre[i] = min(pre[i - 1] + 1, a[i]);
    }
    for (int i = n; i >= 1; i--) {
        nxt[i] = min(nxt[i + 1] + 1, a[i]);
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        ans = max(ans, min(pre[i], nxt[i]));
    }
    cout << ans << endl;
}

int main() {
    solve();
    return 0;
}

E.Digit Sum Divisible(思维,枚举,dp)

题意:

对于一个数字xxx,我们定义它各数位上数字的和为sss,如x=2024,s=2+0+2+4=8x=2024, s=2+0+2+4=8x=2024,s=2+0+2+4=8。现在我们想知道1−N1-N1−N之间有多少个数字xxx满足xxx是sss的倍数。

分析:

本题N≤1014N\le10^{14}N≤1014,即我们可以认为s≤14×9=126s\le14\times9=126s≤14×9=126,即:无论如何,sss最多也不会超过126126126,因此,我们可以对满足1≤s≤1261\le s\le1261≤s≤126和x≤Nx\le Nx≤N的数进行枚举,枚举的过程是通过枚举各个数位上的数来实现的。为了便于获取每一位上的数,我们可以将NNN看做一个字符串,N[d]N[d]N[d]代表从高往低第ddd位的值。

对于每一个可能的目标targettargettarget,我们设置dpdpdp数组,dp[d][cur][rmd]dp[d][cur][rmd]dp[d][cur][rmd]表示:现在我们对第ddd位的数进行枚举,之前枚举结果的数位和为curcurcur,除以targettargettarget的余数为rmdrmdrmd的方案数。那么很容易想到:假设第ddd位上我们放置ttt,那么dp[d+1][cur+t][(rmd∗10+t)%target]dp[d+1][cur+t][(rmd*10+t)\%target]dp[d+1][cur+t][(rmd∗10+t)%target]与dp[d][cur][rmd]dp[d][cur][rmd]dp[d][cur][rmd]的值直接相关,需要进行更新。

但是,本题有一个限制:我们构建的数字不能超过NNN,那么当我们构建到第ddd位时,就要根据之前构建的情况进行分类讨论。若我们构建出的数字从第000位到第d−1d-1d−1位都和NNN一模一样(称为flagflagflag条件),那么我们根据枚举对象ttt的大小,进行分类讨论:

大小关系代表含义
t<N[d]t < N[d]t<N[d]枚举对象没有超过nnn在这一位上的内容,低位可以是任意数字(都不会超过nnn)
t=N[d]t = N[d]t=N[d]枚举对象到第ddd位仍然保持一致,继续传递下去,向后讨论
t>N[d]t > N[d]t>N[d]枚举对象超过了nnn在这一位上的内容,不可能,无需考虑这一情况

而若flagflagflag条件不满足,则后面的位置上可以随意枚举任意的数。因此我们增添一个维度flagflagflag,来进行更新。当ddd与NNN的长度一致,且rmd=0rmd=0rmd=0(没有余数,是满足要求的数字),且cur=targetcur=targetcur=target(创建出的数字数位和,与目标数位和一致)时,代表出现了一种新的方案。

代码:

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
ll dp[20][300][300][5];
string n;
int a[20];

ll dfs(int target, int d, int cur, int rmd, int flag) {
    // 如果d超过n的位数,或者是i超过枚举目标target,都说明无解 
    if (d > n.size() || cur > target)return 0;
    /*
    如果d已经对应了n位数(可能有前导0,这是没关系的),
    且余数为0(可以整除),且目前的和cur与目标和target一致,那说明有一种可行方案 
    */
    if (d == n.size() && rmd == 0 && cur == target)return dp[d][cur][rmd][flag] = 1;
    if (dp[d][cur][rmd][flag] != -1)return dp[d][cur][rmd][flag];
    ll res = 0;
    //在枚举第d位的时候并不是任何数字都可以的,
    //还要考虑之前枚举的数与 n的对应位置上的数a[]是否一致
    //若一致的话,这里就只能填写0~a[d]范围内的数 
    for (int t = 0; t <= 9; t++) {
        if (flag) {
            if (t > a[d])break;
            else if (t == a[d]) {
                //往下一位搜索的时候,需要传递【之前的每一位都和n的对应位置一致】这一信息 
                res += dfs(target, d + 1, cur + t, (rmd * 10 + t) % target, 1);
            } else {
                //这一位数字比N小,之后的数字可以任意枚举 
                res += dfs(target, d + 1, cur + t, (rmd * 10 + t) % target, 0);
            }
        } else {
            //高位数字均比N小,之后的数字可以任意枚举 
            res += dfs(target, d + 1, cur + t, (rmd * 10 + t) % target, 0);
        }
    }
    return dp[d][cur][rmd][flag] = res;

}

int main() {
    cin >> n;
    for (int i = 0; i < n.size(); i++) {
        a[i] = n[i] - '0';
    }
    ll ans = 0;
    for (int s = 1; s <= n.size() * 9; s++) {
        memset(dp, -1, sizeof(dp));
        ans += dfs(s, 0, 0, 0, 1);
    }
    cout << ans << endl;
    return 0;
}

F.Rotation Puzzle(折半搜索)

题意:

有一个HHH行WWW列的格栅图,对应着数字111到H×WH\times WH×W,即格子(i,j)(i,j)(i,j)对应着1≤Si,j≤H×W1\le S_{i,j}\le H\times W1≤Si,j​≤H×W。我们现在希望在若干次操作以后,能够使得Si,j=(i−1)×W+jS_{i,j}=(i-1)\times W+jSi,j​=(i−1)×W+j即从左到右、从上到下,依次为1,2,…,H×W1,2,\dots,H\times W1,2,…,H×W。你所能做的操作是这样的:

  1. 首先,在格栅图中,选定一个大小为(H−1)×(W−1)(H-1)\times(W-1)(H−1)×(W−1)的矩形范围;
  2. 将其中的内容进行180°180°180°旋转,例如:
1 2 3    对应:     6 5 4
4 5 6   ------>    3 2 1

如果你能在202020次操作内将矩阵转换成理想状态,则输出最少的步数,否则输出−1-1−1。

分析:

根据题目所说的旋转区域大小,我们可以认为只存在444种方案,分别对应左上角、左下角、右上角、右下角,对应202020步,就是4×3194\times3^{19}4×319(因为连续旋转同一个区域222次是没有意义的),这个数字超过了4×1094\times10^94×109,仍然会超时。

我们注意到这个过程中指数有很大的影响,此时我们想到可以使用折半搜索:因为我们知道起始状态,也知道目标状态,那么我们可以分别将起始状态向后进行变化,将目标状态向前进行还原,此时对于起始状态,它进行101010次旋转对应的方案数为4×394\times3^94×39,不超过×105\times10^5×105种可能,此时时间复杂度就大大下降了。在枚举过程中,我们使用广度有限搜索,记录步数与对应的旋转结果。

在实现旋转过程时,假设(i,j)(i,j)(i,j)与(k,l)(k,l)(k,l)对应,那么我们有:i+k=2∗x+h−2i+k=2*x+h-2i+k=2∗x+h−2,以及j+l=2∗y+w−2j+l=2*y+w-2j+l=2∗y+w−2,其中(x,y)(x,y)(x,y)是旋转区域左上角的下标。这样以来我们经过代数计算即可找到旋转后的对应位置。如果你对这部分内容感到不理解,可以参考下面的说明图。颜色一样代表他们相对应。

代码:

#include<bits/stdc++.h>

using namespace std;

struct node {
    int step = 0, dir = -1;
    vector<vector<int>> state;

    node() {}

    node(vector<vector<int>> _state, int _step, int _dir) {
        state = _state;
        step = _step;
        dir = _dir;
    }
};

int h, w;
//下面这句话的含义为:创建一个h行w列,名为original的二维动态数组 
vector<vector<int>> original(8, vector<int>(8));
vector<vector<int>> target(8, vector<int>(8));
int d[4][2] = {{0, 0},
               {0, 1},
               {1, 0},
               {1, 1}}; //代表旋转区域的左上角位置 
map<vector<vector<int>>, int> res[2];


vector<vector<int>> rotate(vector<vector<int>> before, int flag) {
    //根据数量关系进行旋转 
    vector<vector<int>> after(h, vector<int>(w));
    int x = d[flag][0], y = d[flag][1];
    int sum_i = x * 2 + h - 2, sum_j = y * 2 + w - 2;
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            if (i >= x && i <= x + h - 2 && j >= y && j <= y + w - 2) {
                //进行旋转 
                after[i][j] = before[sum_i - i][sum_j - j];
            } else after[i][j] = before[i][j]; //其他位置不变 
        }
    }
    return after;
}

void bfs(vector<vector<int>> st, int rotate_target_flag) {
    queue<node> Q;
    Q.push(node(st, 0, -1));
    res[rotate_target_flag][st] = 0;
    vector<vector<int>> cur;
    while (!Q.empty()) {
        node cur = Q.front();
        Q.pop();
        for (int i = 0; i < 4; i++) {
            if (i == cur.dir)continue;
            vector<vector<int>> rotate_res = rotate(cur.state, i);
            if (!res[rotate_target_flag].count(rotate_res)) {
                //注意步骤限制,防止超时 
                if (cur.step < 10)Q.push(node(rotate_res, cur.step + 1, i));
                res[rotate_target_flag][rotate_res] = cur.step + 1;
            }
        }
    }
}

int main() {
    cin >> h >> w;
    for (int i = 0; i < h; i++) {
        //此处为了简化,我们将下标换成从0开始 
        for (int j = 0; j < w; j++) {
            cin >> original[i][j];
            target[i][j] = i * w + j + 1;
        }
    }
    bfs(original, 0);
    bfs(target, 1);
    int ans = 21;
    for (auto cur: res[0]) {
        vector<vector<int>> state = cur.first;
        if (res[1].count(state)) {
            ans = min(ans, res[0][state] + res[1][state]);
        }
    }
    if (ans > 20)cout << -1 << endl;
    else cout << ans << endl;
    return 0;
}

学习交流

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

2026 大厂面试高频题解:Java 并发与底层 + AI 工程 + 算法 LeetCode 高频 12 题【每题带面试官视角、完整解答与追问链路】 本文聚焦2026大厂Java岗面试核心三科:Java底层与并发、AI工程、算法,精选12道高频真题,以“面试官视角→完整解答→复杂度分析→追问链路”结构精讲。涵盖HashMap原理、ConcurrentHashMap线程安全机制、线程池配置策略、synchronized与ReentrantLock对比、RAG链路设计、幻觉治理、Function Calling安全规范、微调与RAG选型决策,以及反转链表、层序遍历等经典算法手撕题。文末附30天冲刺计划,助你高效通关大厂面试。 阅读详情

相关推荐

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 406

AtCoder Beginner Contest 336 D - Pyramid

题意:就是给你一个长为n的序列,让你通过两种不限次数的操作 使其变为金字塔序列,(a1<a2<ak>ak-1>ak-2...>an)由于我们有a[4]的限制 ,相当于a[i-1]的最长序列就到 a[ 2 ],不论 a[2]是 1,还是2 ,3都会满足上式;1:a[ i -1 ]<a[ i] 这里到没什么特殊的就是和a[ i ] 这个限制取min。故状态转移方程就只有 dp[ i ]=min(dp[ i-1 ]+1,a[ i ] );由于我们可以使数减一,我们可以让a[ i-1 ]的最长序列 减 1。

m0_73673533的博客 669

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 550

AtCoder Beginner Contest 334

AtCoder Beginner Contest 334

青少年趣味编程 1006

数字IC后端PPA优化实战:Innovus中Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中PPA优化的核心挑战,重点解析了Innovus与PrimeTime之间Timing不一致的根本原因。通过实战案例,详细介绍了在Innovus中设置Timing Margin、Derate以及RC Scale Factor等关键策略,以校准时序视图。同时,文章分享了利用Module Region进行物理布局规划的技巧,将关键模块约束在最优区域,并结合Group Path等进阶方法,有效提升时序收敛效率与PPA结果的可预测性。

f9g0h的博客 2680

UE5实战:如何用Mesh Shader优化你的游戏场景渲染(附性能对比)

本文深入探讨了在UE5中利用Mesh Shader优化游戏场景渲染的实战方法。通过对比传统渲染管线与GPU Driven Pipeline,详细阐述了Mesh Shader如何通过任务着色器和网格着色器两阶段并行处理,实现更精细的meshlet级剔除,从而显著降低Draw Call和GPU带宽,提升渲染性能。文章附有具体的性能对比数据与代码示例,为开发者优化高复杂度场景提供了有效路径。

sunny的博客 291

AtCoder Beginner Contest 322

AtCoder Beginner Contest 322

青少年趣味编程 737

vcs 覆盖率收集1——三种覆盖率类型、covergroup、bins、数据采样、覆盖率选项

介绍各种覆盖率,以及如何编写覆盖率收集的代码

qq_42135020的博客 1万+

AtCoder Beginner Contest 186

AtCoder Beginner Contest 186

青少年趣味编程 1061

告别密码烦恼:用Windows Server NPS给公司Wi-Fi和有线网加一道MAC地址白名单(附H3C交换机配置)

本文详细介绍了如何利用Windows Server NPS(网络策略服务器)与H3C交换机实现MAC地址白名单认证,为企业Wi-Fi和有线网络提供零密码安全方案。通过配置NPS服务器、网络策略及H3C交换机联调,实现无感知认证体验,降低运维负担,同时满足审计追溯需求。适用于中小企业网络管理,提升安全性与便捷性。

weixin_42535703的博客 360

uni-app - 将 base64 图片编码转为 Blob 本地文件路径(把base64类型的图片,转换成blob二进制文件流)适用于 uni-app / vue.js / JavaScript

uni-app/vue.js/JavaScript将base64转Blob,uniappapp端如何将图片的base64编码转换成File对象或Blob,uni-app/vue.js/JavaScript中拿到base64转blob对象,uniapp图片base64格式转blob格式方法,uniapp上传图片压缩转base64码与base64转图片路径,Base64/Blob/File图片文件转换,url、base64、blob相互转换方法,读取本地文件为Base64并转成B

🏆 前端领域优质创作者 1万+

AtCoder Beginner Contest 283

AtCoder Beginner Contest 283

青少年趣味编程 690

YOLO26改进策略【损失函数篇】| AAAI 2025 SD Loss,基于目标尺度动态调整尺度损失和位置损失的影响系数,减少 IoU 标签波动

在红外小目标检测任务里,基于交并比的损失存在波动问题,像边界框(BBox)标签的IoU损失波动最高可达86%,较小目标的IoU损失稳定性更差,严重影响模型稳定性和回归效果。同时,现有损失函数没有充分考虑不同目标尺度下对尺度和位置的敏感度差异,,并且掩码标签的位置损失在处理漏检物体时难以收敛,容易产生误报。这些问题限制了模型在不同尺度目标上的检测性能,为解决这些问题,提出了损失函数。

Limiiiing的博客 383

Atcoder Beginner Contest 220

Atcoder Beginner Contest 220

青少年趣味编程 1106

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

AtCoder Beginner Contest 330

AtCoder Beginner Contest 330

青少年趣味编程 1039

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

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

AtCoder Beginner Contest 273

AtCoder Beginner Contest 273

青少年趣味编程 1045

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【优选算法 — 双指针】经典例题题解+算法总结

本文总结了双指针算法在三道经典题中的应用:1)移动零——使用快慢指针将非零元素前移,零元素后移;2)复写零——采用反向回填同向双指针,从右向左复写0,避免覆盖;3)盛水最多容器——运用对撞指针,根据短板原则移动指针,高效求解最大面积。算法时间复杂度均为O(n),显著优于暴力法。文章还归纳了双指针的三类模式:快慢指针、反向回填同向双指针、对撞指针,并附推荐练习题,助力算法学习。

Tsuki_tl的博客 317

贪心题目:加油站

个加油站,需要找到可以绕环路行驶一周的出发加油站的编号。,则无论从哪个加油站出发,绕环路行驶一周之后的剩余汽油都是负数,因此不可能绕环路行驶一周,返回。初始时油箱中的汽油是零,如果行驶到一个加油站的剩余汽油是负数,则无法行驶到该加油站。,此时第三段的汽油变化一定是正数,一定可以在第三段找到一个加油站作为起点,在遍历到。,则遍历过程中任意时刻的汽油都是非负数,因此可以绕环路行驶一周。,如果可以绕环路行驶一周,则返回出发时加油站的编号,否则返回。,则一定存在一个加油站作为起点,可以绕环路行驶一周。

stormsunshine的博客 329

【算法拾光】双指针|两数之和 II - 输入有序数组 + 三数之和

本文总结双指针核心技巧——相向双指针,适用于有序数组。两数之和II通过左右夹逼实现O(n)时间、O(1)空间解法;三数之和则在排序基础上固定一数,结合双指针与三层去重(固定数、左指针、右指针),避免重复答案,复杂度为O(n²)。核心思想:利用有序数组的单调性,通过指针单向移动高效排除不可能组合,是后续多数问题的基础。

wuqingyigexiaoba的博客 264

优选算法——【双指针算法1】C++实现

双指针算法详细题解思路

2402_87037360的博客 496

算法札记:线性筛法乱改乱改内层循环条件有感

该代码为埃拉托斯特尼筛法的优化版本,用于求素数。WA版本未标记1为非素数,导致错误;AC版本添加vis[1]=true,并调整循环边界至N-2,确保正确筛除合数。关键优化在于内层循环中一旦i%p[j]==0即跳出,避免重复标记,提升效率。注意初始化与边界处理是正确性的关键。

Keven_11的博客 101

P1192 台阶问题

题目P1192台阶问题是一道经典的递归与动态规划结合题。通过记忆化搜索或递推DP求解,状态转移为:到达第n阶的方案数等于前k步内各阶方案数之和。关键在于初始化dp[0] = 1(起点),其余按dp[i] = sum(dp[i-j])递推,取模100003防止溢出。代码简洁,逻辑清晰,是理解动态规划基础的好例题。

UIU114的博客 170

算法一千零一夜 · 第十五夜 一门别扭的外语

比特王国第二课:房卡上的 6 和 4 是一种什么文字。速记官的十六枚戳,三块屏幕各司其职,FF 的两副面孔,和一条简单到不像学问的国籍法:二进制里只有一个 1。幻方旅行团回门,10 过不了闸,16 是上宾。

qq_41057763的博客 380

算法--桶思想

谐距下标对;最大 FST 距离

w_zero_one的博客 52

算法day1--移动零&&复写零

答案藏在不变量的第二句里:既然。

2401_85340832的博客 375

限流算法——固定窗口、滑动窗口、漏桶、令牌桶

本文对比了三种常见限流算法:计数器(固定/滑动窗口)仅关注请求数量,易受临界突刺影响;漏桶算法通过恒定速率输出,实现流量整形,保护下游但响应延迟高;令牌桶则允许突发,空闲时攒令牌,兼顾平滑与效率,适合大多数场景。三者本质区别在于对突发流量的处理策略,选择应基于业务需求。

fancyfor的博客 226
上一篇: Codeforces Hello 2024 A~F1
下一篇: Codeforces Round 919 (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、付费专栏及课程。

余额充值