EPIC Institute of Technology Round Summer 2024 A~F2

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

A. Upload More RAM (贪心)

题意:

你想上传 nnn GBGBGB 的 RAMRAMRAM。每秒,你能上传 000 或 111 GBGBGB 的 RAMRAMRAM。但是,你的网络速度有限制:在任何连续 kkk 秒内,你最多只能上传 111 GBGBGB 的 RAMRAMRAM。

输出上传 nnn GBGBGB的RAMRAMRAM 所需的最少秒数。

分析:

我们贪心地叠加,答案为(n−1)×k+1(n-1) \times k+1(n−1)×k+1

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, k;
        cin >> n >> k;
        cout << (n - 1) * k + 1 << endl;
    }
    return 0;
}

B.K-Sort (思维)

题意:

给出一个长度为 nnn 的整数数组 aaa 。

你可以多次(可能是零次)执行以下操作:

  • 选择一个整数 kkk ,使得 1≤k≤n1 \le k \le n1≤k≤n ,并支付 k+1k + 1k+1 个硬币。
  • 然后,选择kkk 个索引ix{i_x}ix​。
  • 然后,对于从 111 到 kkk 的每个 xxx ,将 aixa_{i_x}aix​​ 增加 111 。

找到使 aaa 非降序所需的最小硬币数量。

分析:

令pi=max(0,ai−1−ai)p_i=max(0,a_{i-1}-a_i)pi​=max(0,ai−1​−ai​),那么我们得到一个数组ppp,将其升序排序,将题目转化为将数组ppp全变为000,操作的代价为∑i=1npi+max(pi)\sum_{i=1}^n p_i +max(p_i)∑i=1n​pi​+max(pi​)。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        vector<LL> a(n);
        for (int i = 0; i < n; i++)
            cin >> a[i];
        vector<LL> p{0};
        for (int i = 1; i < n; i++) {
            if (a[i] < a[i - 1]) {
                p.push_back(a[i - 1] - a[i]);
                a[i] = a[i - 1];
            }
        }
        sort(p.begin(), p.end());
        LL ans = 0;
        LL maxval = 0;
        for (int i = 0; i < p.size(); i++) {
            maxval = max(maxval, p[i]);
            ans += p[i];
        }
        ans += maxval;
        cout << ans << endl;
    }
    return 0;
}

C.Basil’s Garden (思维)

题意:

一排有 nnn 朵花,其中第 iii 朵花的初始高度为hih_ihi​ 米。
每一秒,风都会从左侧吹来,导致一些花的高度降低。
具体来说,每一秒,对于从 111 到 nnn 的每个 iii ,按此顺序,会发生以下情况:

  • 如果是 i=ni = ni=n 或 hi>hi+1h_i > h_{i + 1}hi​>hi+1​ ,则 hih_ihi​ 的值变为 max⁡(0,hi−1)\max(0, h_i - 1)max(0,hi​−1) 。

询问对于所有 1≤i≤n1 \le i \le n1≤i≤n ,第一次出现 hi=0h_i=0hi​=0 之前需要经过多少秒?

分析:

设fif_ifi​表示第iii朵花的高度第一次变为000的时间,那么对于第iii朵花:

  • 若其高度小于等于第i+1i+1i+1朵,则其高度变为000的时间为第i+1i+1i+1朵高度变为000的时间+1+1+1
  • 若其高度大于第 i+1i+1i+1 朵,则其高度变为000的时间为第i+1i+1i+1朵高度变为000的时间+1+1+1和其高度之间的最大值。

代码:

#include <bits/stdc++.h>

using namespace std;
const int N = 3e5 + 10;
int n;
int a[N];

int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n;
        a[n + 1] = 0;
        for (int i = 1; i <= n; ++i)
            cin >> a[i];
        int ans, num;
        ans = num = 1ll * a[n];
        for (int i = n - 1; i; --i)
            if (a[i + 1] >= a[i])
                num++, ans = max(ans, num);
            else {
                num = max(1ll * a[i] - 1ll * (num - a[i + 1] + 1), 1ll * a[i + 1]) + 1ll * (num - a[i + 1] + 1);
                ans = max(ans, num);
            }
        cout << ans << endl;
    }
    return 0;
}

D.World is Mine (dp)

题意:

AliceAliceAlice 和 BobBobBob 正在玩游戏。最初,有 nnn 个蛋糕,第 iii 个蛋糕的美味值为 aia_iai​ 。

AliceAliceAlice 和 BobBobBob 轮流吃蛋糕,AliceAliceAlice 先吃:

  • 轮到AliceAliceAlice选择并吃掉满足下列条件的一块蛋糕,其美味度严格大于她之前吃过的任何蛋糕的最大美味度。请注意,在第一轮,她可以选择任何蛋糕。
  • 轮到BobBobBob选择并吃掉任何剩下的一块蛋糕。

当当前玩家吃不到合适的蛋糕时,游戏结束。让 xxx 为 AliceAliceAlice 吃过的蛋糕数量。然后,AliceAliceAlice 想要最大化 xxx ,而 BobBobBob 想要最小化 xxx 。

计算如果两个玩家都发挥最佳的话,爱丽丝会吃多少个蛋糕。

分析:

AliceAliceAlice的最优策略肯定是永远选可以选的数里最小的,那么BobBobBob的策略就是应该取完一些数字,使得AliceAliceAlice选不着这些数字。令dp[i][j]dp[i][j]dp[i][j]表示对于前iii个数字,后手取完了其中jjj个,至少需要多少次操作。
假设前iii个数字共有xxx个,取走jjj个数字中的共有yyy个,那么必须要有i−j≥yi-j \ge yi−j≥y才可以,否则不能在AliceAliceAlice取之前完成所有操作。用dpdpdp转移即可。

代码:

#include <bits/stdc++.h>

using namespace std;
const int INF = 1e9;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        vector<int> tmp(n + 1);
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            tmp[x] += 1;
        }
        vector<int> cake;
        for (int i = 1; i <= n; i++) {
            if (tmp[i] > 0) {
                cake.push_back(tmp[i]);
            }
        }
        const int m = cake.size();
        vector<int> dp(m + 1, INF);
        dp[0] = 0;
        for (int i = 0; i < m; i++) {
            auto tmp1 = dp;
            for (int j = 0; j < i; j++) {
                if (dp[j] + cake[i] <= i - j) {
                    tmp1[j + 1] = min(tmp1[j + 1], dp[j] + cake[i]);
                }
            }
            dp.swap(tmp1);
        }
        int ans = INF;
        for (int i = 0; i <= m; i++) {
            if (dp[i] < INF / 2) {
                ans = min(ans, m - i);
            }
        }
        cout << ans << endl;
    }
    return 0;
}

E.Wonderful Tree! (dp)

题意:

给定一棵树,有 nnn 个顶点,根节点为 111 。第 iii 个顶点上写有一个整数 aia_iai​ 。
让 LLL 为 vvv 的所有直接子节点的集合。如果对于所有LLL不为空的顶点 vvv ,满足

av≤∑u∈Lau. a_v \le \sum_{u \in L}{a_u}. av​≤u∈L∑​au​.

则称这棵树为奇妙树。
你可以选择任意顶点 vvv 并将 ava_vav​ 增加 111 。
找到使给定的树变得奇妙树所需的最少操作数!
如果满足以下条件,则顶点 uuu 称为顶点 vvv 的直接子节点:

  • uuu 和 vvv 由一条边连接,并且
  • vvv 位于从 uuu 到树根的(唯一)路径上。

分析:

如果一个结点不满足要求,那么我们需要增加其儿子的值,但是增加儿子的值有可能导致儿子不满足要求,所以又要增加儿子的儿子的值。我们通过dpdpdp,自底向上考虑,如果是叶子的父亲不满足要求,我们只需要增加叶子的值即可,一次只需要一个单位的代价。并且没有任何限制。
所以可以令父亲继承儿子的所有操作,只需要把儿子的所有操作代价加一即可(加上这个父亲结点的代价)。当需要操作时,贪心地使用代价最小的操作即可。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;
const int INF = 1e9;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        vector<int> a(n);
        for (auto &x: a)
            cin >> x;
        vector<int> d(n);
        vector<vector<int>> g(n);
        for (int i = 1; i < n; i++) {
            int x;
            cin >> x;
            x--;
            g[x].push_back(i);
            d[i] = d[x] + 1;
        }
        vector<LL> b(n);
        for (int v = 0; v < n; v++) {
            if (g[v].empty()) {
                b[v] = INF;
            } else {
                b[v] = -a[v];

                for (int u: g[v]) {
                    b[v] += a[u];
                }
            }
        }

        LL ans = 0;
        for (int v = n - 1; v >= 0; v--) {
            queue<int> q;
            q.push(v);
            while (!q.empty()) {
                int i = q.front();
                q.pop();
                for (int u: g[i]) {
                    LL delta = min(-b[v], b[u]);
                    if (delta > 0) {
                        b[v] += delta;
                        b[u] -= delta;
                        ans += delta * (d[u] - d[v]);
                    }
                    q.push(u);
                }
            }
        }

        cout << ans << endl;
    }
    return 0;
}

F1. Interesting Problem (Easy Version) (dp)

题意:

给出一个长度为 nnn 的整数数组 aaa 。
在一次操作中,你可以执行以下两步过程:

  1. 选择一个索引 iii ,使得 1≤i<∣a∣1 \le i < |a|1≤i<∣a∣ 和 ai=ia_i = iai​=i 。
  2. 从数组中删除 aia_iai​ 和 ai+1a_{i+1}ai+1​ ,并连接剩余部分。

找出你可以执行上述操作的最大次数。

分析:

我们观察可以发现,消除的每一个区间,都是以类似括号序列的形式消去的,并且当前区间能被操作多少次只跟其之前的区间操作了多少次有关。令dp1[l][r][x]dp1[l][r][x]dp1[l][r][x]表示之前的区间操作了xxx次时[l,r][l,r][l,r]的答案,dp2[l][r][x]dp2[l][r][x]dp2[l][r][x]表示之前的区间操作了xxx次时[l,r][l,r][l,r]完全消去的答案。在计算dp2dp2dp2的时候,如果此时选择要消除的位置为l,jl,jl,j,之前的操作数为xxx,那么需要计算dp2[l][j][x]dp2[l][j][x]dp2[l][j][x]。并且不能直接把xxx传到下一层中,因为如果xxx次操作全部用掉,那么最外面这一层[l,j][l,j][l,j]存在无法消去的可能。

代码:

#include <bits/stdc++.h>

using namespace std;
const int N = 105;
const int INF = 1e9;
int tmp1[N][N][N], tmp2[N][N][N];
int a[N];

int solve2(int l, int r, int x) {
    if ((r - l + 1) % 2 != 0)
        return -INF;
    if (r - l + 1 == 0)
        return 0;
    if (~tmp2[l][r][x])
        return tmp2[l][r][x];
    int ans = -INF;
    if (a[l] % 2 == l % 2 and a[l] <= l and a[l] >= l - 2 * x) {
        int cur = (l - a[l]) / 2;
        for (int j = l + 1; j <= r; j += 2) {
            int t = solve2(l + 1, j - 1, cur);
            if (t < 0)
                continue;
            int s = t + 1;
            t = solve2(j + 1, r, x + s);
            if (t < 0)
                continue;
            s += t;
            ans = max(ans, s);
        }
    }
    return tmp2[l][r][x] = ans;
}

int solve1(int l, int r, int x) {
    if (l >= r)
        return 0;
    if (~tmp1[l][r][x])
        return tmp1[l][r][x];
    int ans = 0;
    ans = max(solve1(l + 1, r, x), solve1(l, r - 1, x));
    for (int i = l; i < r; i++) {
        int t = solve1(l, i, x);
        ans = max(ans, t + solve1(i + 1, r, x + t));
    }
    for (int j = l + 1; j <= r; j += 2) {
        int t = solve2(l, j, x);
        if (t < 0)
            continue;
        int s = t;
        s += solve1(j + 1, r, x + t);
        ans = max(ans, s);
    }
    return tmp1[l][r][x] = ans;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        memset(tmp1, -1, sizeof(tmp1));
        memset(tmp2, -1, sizeof(tmp2));
        cout << solve1(1, n, 0) << endl;
    }
    return 0;
}

F2. Interesting Problem (Hard Version) (dp)

题意:

给出一个长度为 nnn 的整数数组 aaa 。
在一次操作中,你可以执行以下两步过程:

  1. 选择一个索引 iii ,使得 1≤i<∣a∣1 \le i < |a|1≤i<∣a∣ 和 ai=ia_i = iai​=i 。
  2. 从数组中删除 aia_iai​ 和 ai+1a_{i+1}ai+1​ ,并连接剩余部分。

找出你可以执行上述操作的最大次数。

分析:

令dpidp_idpi​表示前iii个数字最多能消去多少个数字,我们枚举下一个需要删除的段进行删除。我们首先要计算f[l][r]f[l][r]f[l][r]表示想要删除完[l,r][l,r][l,r]至少需要删除多少个元素,并以此来判断某一段能否被删除。接下来就可以用区间dpdpdp的思想去解决问题。

代码:

#include <bits/stdc++.h>

using namespace std;
const int N = 805;
const int INF = 1e9;
int a[N];
int f[N][N];

int solve1(int l, int r) {
    if (r - l + 1 == 0)
        return 0;
    if (a[l] % 2 != l % 2 or a[l] > l)
        return INF;
    if (~f[l][r])
        return f[l][r];
    int ans = INF;
    int tmp = (l - a[l]) / 2;
    for (int i = l + 1; i <= r; i += 2) {
        if (solve1(l + 1, i - 1) > tmp)
            continue;
        int t = solve1(i + 1, r);
        ans = min(ans, max(tmp, t - (i - l + 1) / 2));
    }
    return f[l][r] = ans;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        memset(f, -1, sizeof f);
        vector<int> g(n + 1);
        for (int i = 0; i < n; i++) {
            g[i + 1] = max(g[i + 1], g[i]);
            for (int j = i + 2; j <= n; j += 2) {
                if (solve1(i + 1, j) <= g[i]) {
                    g[j] = max(g[j], g[i] + (j - i) / 2);
                }
            }
        }
        cout << g[n] << endl;
    }
    return 0;
}

赛后交流

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

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

保姆级教程:在RK3588开发板上编译带MPP硬件加速的FFmpeg(含完整依赖库配置) 本文提供在RK3588开发板上编译支持MPP硬件加速的FFmpeg的详细教程,涵盖交叉编译环境搭建、MPP框架及依赖库配置,最终实现4K视频硬件编解码性能优化。通过实战步骤和性能对比,展示如何充分发挥RK3588的硬件加速能力。 阅读详情

相关推荐

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 546

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

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

Mysssone的博客 201

开源滑翔伞升降速度表:基于STM32与传感器融合的DIY飞行仪表

传感器融合是现代嵌入式系统与物联网设备中的核心技术,它通过整合多个传感器的数据,利用滤波与估计算法,获得比单一传感器更精确、更可靠的环境感知能力。其技术价值在于提升系统的鲁棒性、精度和上下文理解能力,广泛应用于无人机导航、可穿戴设备、工业监测及智能驾驶等领域。本文聚焦于一个具体的工程实践案例——开源多功能滑翔伞升降速度表(Open-Vario),该项目巧妙地运用了**卡尔曼滤波器**进行气压与GNSS数据的融合,以精确计算升降率,并基于**FreeRTOS**实时操作系统构建了一个稳定、可扩展的嵌入式平台,

weixin_33657398的博客 176

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

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

wuqingyigexiaoba的博客 309

Python爬虫技术应用:体育赛事直播数据抓取与分析

Web爬虫(Web Crawling)是一种通过模拟浏览器行为从网站获取数据的技术。发送请求:发送HTTP请求(通常是GET或POST请求)获取目标网页的HTML内容。解析网页:使用解析工具(如lxml)从HTML中提取出所需要的信息。存储数据:将抓取到的数据存储到数据库、文件或数据结构中,供后续分析和使用。数据分析与展示:使用数据分析工具(如PandasMatplotlib)对数据进行处理、清洗和可视化,生成有价值的报告和图表。Requests:用于发送静态网页的HTTP请求并获取响应。

2201_76125261的博客 1309

道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价

SAP HANA 之引入,使 ABAP 于处理大数据,云计算等新兴领域,展现新的生命力,如老吾老以及人之老,幼吾幼以及人之幼,扩展其在信息技术领域的应用,以涵养更广之需。ABAP 能以数据为基,流转于系统之中,如道法自然,顺应企业之生态,助之以高效运转,减少冗杂,简化管理,使企之运营,如小国寡民,无为而治。然 ABAP 如老树盘根,更替不易,面对新兴技术,如云计算、大数据等,其更新之速,未能与时俱进。如水之于渊,柔而能胜刚,ABAP 之发展,顺时而动,应需而变,其在编程领域,犹如道之于万物,渐不可或缺矣。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1023

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

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序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

GEE:基于自定义的年度时序数据集进行LandTrendr变化检测

本文介绍了使用年度时序数据进行LandTrendr变化检测的方法,包括核心函数调用、参数设置和结果可视化。通过筛选参数(年份、变化幅度和持续时间)对结果进行过滤,输出变化年份、变化幅度和持续时间。代码提供了完整的处理流程,包括数据输入、LandTrendr算法运行、结果筛选与可视化,并支持结果导出。适用于基于Google Earth Engine平台的地表变化检测分析。

养乐多的博客 752

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

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

2503_92261635的博客 20

Android 14.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

在14.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析实现这个功能

安卓兼职framework和app工程师的博客 1309

ZW3D 二次开发-制作插件

1.Windows 7 SP1 或 Windows 10 或 Windows 11(推荐 Windows 11)2.Visual studio 2017-2022 (或 C/C++的任何其他集成开发环境)(推荐 Visual studio 2022)3.ZW3D 2023 或以上版本(建议使用与 ZW3D 一致的 API 的版本)4.Qt5.9.7(for Windows)博主学习使用环境的是:Windows 11 Version 24H2 + Visual studio 2022 + Qt5.9.7(fo

fhqiwmc的博客 810

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

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

2301_81429079的博客 748

AI智能体在化学中的伦理问题:7个案例,架构师如何应对?

AI在化学中的应用早已不是新鲜事:药物发现中用AI预测分子活性(比如AlphaFold预测蛋白质结构)、化工生产中用AI优化合成路线(降低成本30%+)、材料研发中用AI设计新型电池材料(缩短研发周期5年)……但随着AI从“辅助工具”升级为“自主决策智能体”(比如能自动调整反应条件的“化学机器人”),伦理风险开始从“潜在隐患”变成“真实事故”。AI在化学中会踩哪些伦理“坑”?(用案例具象化)这些“坑”的底层逻辑是什么?(从技术到价值观的链条)架构师能做什么?

AI 算法实战派 1362

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

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

wuqingyigexiaoba的博客 367

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

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

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

2501_94316951的博客 170

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

weixin_44218929的博客 82

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

算法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

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 181

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 336

【Deep-OC-SORT 05】多轨迹算法Deep-OC-SORT-IoU代价与VDC方向一致性融合过程

本工程在DeepOcSort中实现三路融合关联:IoU(位置重叠)、VDC(速度方向一致性)与外观相似度,通过加权求和生成总相似度,取负作为匈牙利算法的代价。其中,VDC利用轨迹惯性方向与检测方向的点积判断运动一致性,抑制反向误匹配;外观分采用网格化余弦距离并结合动态权重AW,提升遮挡场景下的鲁棒性。支持关闭外观分支(--emb_off),且通过快路径优化加速多数帧处理。最终配对经IoU复核,确保位置合理性,有效减少密集场景下的ID切换。

Jayson 博客 335
上一篇: AtCoder Regular Contest 180(A~D)
下一篇: 信息学一周赛事安排
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值