Codeforces Round #772 (Div. 2) A~F

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

前一段时间总是忙着学校的各种事情,好久没发过博客了,现在更新起来,从一场Codeforces的div2开始吧

A. Min Or Sum

题目大意

给你 nnn 个数记为 aia_iai​,你可以进行任意次数的操作,使得这 nnn 个数之和最小。
操作:选择两个不同的数 i,ji, ji,j ,以及两个非负整数 x,yx, yx,y,用 xxx 代替 aia_iai​,yyy 代替 aja_jaj​,且满足 ai∣aj=x∣ya_i | a_j = x|yai​∣aj​=x∣y

思路

看到 或 操作,容易想到从二进制角度来考虑这些数,我们发现,对于这些数中已存在的二进制位上的这些 111,我们是无法通过上述操作删除的,但是我们总是有办法使得这些 111,在这么 nnn 个数中只出现一次。

所以将这 nnn 个数都或起来就行了。

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 2e5 + 7;

void solve(){
	int n;
	cin >> n;
	int sum = 0;
	for(int i = 1; i <= n; i++){
		int x;
		cin >> x;
		sum |= x;
	}
	cout << sum << "\n";
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	for(int i = 1; i <= t; i++){
		solve();
	}
}

B. Avoid Local Maximums

题目大意

给你 nnn 个数,让你进行最少次操作,使得这些数中不存在局部最大值(即不存在 ai−1<ai<ai+1a_{i-1} < a_i < a_{i+1}ai−1​<ai​<ai+1​)
操作:你可以将一个数变为任意一个数,记为一次操作

解题思路

首先我们考虑第 iii 个位置为局部最大值,那我们改变第 i+1i+1i+1 位置的值,我们考虑第 i+1i+1i+1 位置的值改为 iii 位置的值或者 i+2i+2i+2 位置的值(尽可能让后面也没有局部最大值),判断一下即可。

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 2e5 + 7;

void solve(){
	int n;
	cin >> n;
	vector<int> a(n+1);
	for(int i = 1; i <= n; i++){
		cin >> a[i];
	}
	int num = 0;
	for(int i = 2; i < n; i++){
		if(a[i] > a[i-1] && a[i] > a[i+1]){
			num++;
			if(i + 3 <= n && a[i] < a[i+2] && a[i+2] > a[i+3]){
				a[i+1] = a[i+2];
			}
			else{
				a[i+1] = a[i];
			}
		}
	}
	cout << num << "\n";
	for(int i = 1; i <= n; i++){
		cout << a[i] << " \n"[i==n];
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	for(int i = 1; i <= t; i++){
		solve();
	}
}

C. Differential Sorting

题目大意

给你 nnn 个数,让你进行一些操作(不限定要最小次数),使得这 nnn 个数成为非递减的序列,输出操作次数以及如何操作的,如果不能成立则输出 −1-1−1
操作:选三个不同的数作为下标 x<y<zx < y < zx<y<z,用 ay−aza_y - a_zay​−az​ 代替 axa_xax​

解题思路

根据操作的特点我们发现,最后两个数的无法变化的,所以如果最后两个数不是有序的,那么一定无法满足条件。

首先判断最开始是否是有序的,如果有序直接输出 000 就行了。

再判断最后两个数是否有序,如果无序则不行

然后判断最后一个数是否大于等于 000,如果是的话,我们可以用最后两个数构造出前面 n−2n-2n−2 个数,一直满足条件,否则不行(因为一个数减负数会让值变大)。

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 2e5 + 7;

void solve(){
	int n;
	cin >> n;
	vector<ll> a(n);
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	vector<ll> b = a;
	sort(b.begin(), b.end());
	if(b == a){
		cout << "0\n";
		return;
	}
	if(a[n-2] > a[n-1]){
		cout << "-1\n";
		return;
	}
	if(a[n-1] < 0){
		cout << "-1\n";
		return;
	}
	else{
		cout << n-2 << "\n";
		for(int i = n-2; i >= 1; i--){
			cout << i << " " << i+1 << " " << n << "\n";
		}
			
		
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin >> t;
	for(int i = 1; i <= t; i++){
		solve();
	}
}

D. Infinite Set

题目大意

给你 nnn 个不同的数组成的数列 aaa,以及一个数 ppp,问你集合中最大元素不超过 2p2^p2p ,这样的集合中有多少个元素。

集合的定义如下,集合中的元素满足一下三个条件中的任意一个

  1. x=aix=a_ix=ai​ for some 1≤i≤n.1≤i≤n.1≤i≤n.
  2. x=2y+1x=2y+1x=2y+1 and yyy is in S.S.S.
  3. x=4yx=4yx=4y and yyy is in S.S.S.

解题思路

这样的题目看起来很费解,有点无从下手的感觉。

观察到 ppp 的范围很大 [1,2×105][1, 2\times 10^5][1,2×105], 数列 aaa 的范围[1,1×109][1, 1\times 10^9][1,1×109]

可以发现,当 ppp 很大时 [2p−1,2p−1][2^{p-1}, 2^p -1][2p−1,2p−1] 中的元素只能通过上面的第二第三种方法生成出来,而且生成的数是不重复的,因为第二种方法生成的是奇数,而第三种方法生成的是偶数。

为了方便,我们定义 dp[p]dp[p]dp[p] 表示集合 SSS 中的元素,在[2p−1,2p−1][2^{p-1}, 2^p -1][2p−1,2p−1] 范围中的个数,根据上面的观察,我们可以得出
dp[i]=dp[i−1]+dp[i−2]dp[i] = dp[i-1] + dp[i-2]dp[i]=dp[i−1]+dp[i−2]

当 ppp 不够大时,也就是在 303030 以内时,我们需要考虑 dp[p]dp[p]dp[p] 中的元素不一定都是通过上述第二、三种方法生成的,而是来自于数列 aaa 中。

我们能否直接将数列 aaa 全部计入答案呢?实际上是不行的,因为数列 aaa 中的数可能也满足上述第二、三种条件,这样我们会重复计数。所以,我们需要对数列 aaa 进行预处理,挑出其中最 “基本” 的元素。这里我们直接按第二、三种方法删掉一些数就行了(见代码)。然后将这些数划分到对应的区间即可。

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 2e5 + 7;
const ll mod = 1e9 + 7;


void solve(){
	int n, p;
	cin >> n >> p;
	map<int, int> mp;
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		mp[x] = 1;
	}
	set<int> v;
	for(auto [x, y] : mp){
		int t = x;
		int f = 0;
		while(t > 0){
			if(v.count(t)){
				f = 1;
				break;
			}
			if(t & 1){
				t = (t - 1) / 2;
			}
			else if(t % 4 == 0){
				t /= 4;
			}
			else{
				break;
			}
		}
		if(!f){
			v.insert(x);
		}
	}
	vector cnt(32, 0ll);
	for(auto x : v){
		cnt[__lg(x)]++;
	}
	ll ans = 0;
	vector dp(p, 0ll);
	for(int i = 0; i < p; i++){
		if(i < 32){
			dp[i] = cnt[i];
		}
		if(i >= 1)
			dp[i] = (dp[i] + dp[i-1]) % mod;
		if(i >= 2)
			dp[i] = (dp[i] + dp[i-2]) % mod;
		ans = (ans + dp[i]) % mod;
	}
	cout << ans << "\n";
	
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
//	cin >> t;
	t = 1;
	for(int i = 1; i <= t; i++){
		solve();
	}
}

E. Cars

题目大意

数轴上有 nnn 辆车,两两不在同一个位置,然后每辆车有一个朝向(向左或向右),不能更改,让你构造出一个合法的排列情况(即每辆车的朝向与位置),满足以下条件。
1 i j1\ i\ j1 i j — iii-th car and jjj-th car 无论以什么样的速度行驶都不会相遇

2 i j2\ i \ j2 i j — iii-th car and jjj-th car 无论以什么样的速度行驶都会相遇

解题思路

容易发现, 存在上述关系的两辆车,一定朝向相反

分析

  1. 如果无论以什么样的速度行驶都不会相遇。如果同向的话,会有追击相遇问题,只有背对背行驶,才能满足上述条件
  2. 如果无论以什么样的速度行驶都会相遇。如果同向的话,在前面的车速度快,那么不会相遇。只有面对面行驶,才能满足上述条件。

所以,这个图必须是可以二分图染色的,染完色的 010101 表示 LRLRLR。

染完色之后怎么排列结果呢?我们最后的目的是要在数轴上排一个顺序以及确定方向,我们考虑从小到大排列。我们考虑如果 iii 车与 jjj 车,不会相遇,当 iii 车的方向为 LLL 时, 建立一个 i→ji \rightarrow ji→j 的边,否则建立相反的边。这样我们建立了一个有向无环图,进行一个拓扑排序可以得到最后的答案。

由于存在不合法的情况, 所以在其中要处理一些无解的情况。

Code

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
using ll = long long;
const int MAXN = 2e5 + 7;

int n,m;
vector<int> v[MAXN];
vector<array<int, 3>> vv;
void solve() {
	cin >> n >> m;
	for(int i = 1; i <= m; i++) {
		int x, y, r;
		cin >> r >> x >> y;
		vv.push_back({r, x, y});
		v[x].pb(y);
		v[y].pb(x);
	}
	vector col(n+1, -1);
	auto dfs = [&](auto self, int x) ->void{
		for(int j : v[x]){
			if(col[j] == -1){
				col[j] = col[x] ^ 1;
				self(self, j);
			}
		}
	};
	for(int i = 1; i <= n; i++) col[i] = -1;
	for(int i = 1; i <= n; i++) {
		if(col[i] == -1) {
			col[i] = 0;
			dfs(dfs, i);
		}
	}
	vector<int> in(n+1), ans(n+1);
	for(int i = 1; i <= n; i++) v[i].clear();
	for(auto [r, x, y] : vv) {
		if(col[x] == col[y]){
			cout << "NO\n";
			return;
		}
		if(r == col[x] + 1) {
			v[x].push_back(y);
			in[y]++;
		} else {
			v[y].push_back(x);
			in[x]++;
		}
	}
	queue<int>  q;
	for(int i = 1; i <= n; i++) {
		if(!in[i]) q.push(i);
	}
	int cnt = 0;
	while(!q.empty()) {
		int tmp = q.front();
		q.pop();
		ans[tmp] = ++cnt;
		for(int i : v[tmp]) {
			in[i]--;
			if(in[i] == 0)
				q.push(i);
		}
	}
	if(cnt == n) {
		cout << "YES\n";
		for(int i = 1; i <= n; i++)
			cout << "LR"[col[i]] << " " << ans[i] << "\n";
	} else {
		cout << "NO\n";
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
//	cin >> t;
	t = 1;
	for(int i = 1; i <= t; i++) {
		solve();
	}
}

F. Closest Pair

题目大意

在数轴上存在一些点,每个点有坐标 xix_ixi​ 和一个权值 wiw_iwi​,有 qqq 次询问,问你第 lll 个点,到第 rrr 个点中,点对的最小值为多少。

点对的值定义为 ∣xi−xj∣×(wi+wj)|x_i - x_j| \times (w_i + w_j)∣xi​−xj​∣×(wi​+wj​)

我们可以将权值看做第二维,建立一个平面,通过观察可以发现一些性质。
在这里插入图片描述
观察上图(横轴为 xxx 轴),我们发现(1,3)永远不可能成为答案,因为(1,2),(2,3)更小,而(4,7)可能成为答案。这时我们可以发现,能成为答案的点对实际上并不多。两个点能成为答案,必须两个点之间不存在权值小于等于两个点权值的最大值。

为了求出这些点对,我们可以维护一个权值上升的单调栈,新加入栈中的值将权值比它小的弹出构成点对,然后与栈顶的点构成点对(这很重要,忘记了这一点会漏掉许多可能的值,这里本质上来说是相邻的两个点能够成答案)

处理完之后,我们最多得到 2n2n2n 个点对,然后为了得到答案,我们枚举右端点,用树状数组来维护前缀最小值即可(这个数据结构要好好想想)。

Code

#include <bits/stdc++.h>
#define pb push_back
#define ll long long
const ll inf = 8e18;
using namespace std;
const int MAXN = 2e5 + 7;
template <typename T>
struct Fenwick {
    const int n;
    std::vector<T> a;
    Fenwick(int n) : n(n), a(n+1, inf) {}
    void update(int x, T v) {
        for (int i = x; i <= n; i += i & -i) {
            a[i] = min(a[i], v);
        }
    }
    T sum(int x) {
        T ans = inf;
        for (int i = x; i > 0; i -= i & -i) {
            ans = min(ans, a[i]);
        }
        return ans;
    }
    T rangeSum(int l, int r) {
        return sum(r) - sum(l-1);
    }
};
void solve() {
	int n, q;
	cin >> n >> q;
	vector<ll> x(n+1), w(n+1); 
	Fenwick<ll> fen(n);
	stack<int> st;
	vector<pair<int, ll>> p[n+1];
	auto add = [&](int i, int j){
		p[j].push_back(make_pair(i, 1ll*(x[j] - x[i])*(w[i] + w[j])));
	};
	for(int i = 1; i <= n; i++){
		cin >> x[i] >> w[i];
		if(st.empty())
			st.push(i);
		else{
			while(!st.empty() && w[st.top()] >= w[i]){
				add(st.top(), i);
				st.pop();
			}
			if(!st.empty()) add(st.top(), i);
			st.push(i);
		}
	}
	vector<pair<int, int>> que[n+1];
	vector ans(q+1, 0ll);
	for(int i = 1; i <= q; i++){
		int l, r;
		cin >> l >> r;
		que[r].pb({l, i});
	}
	for(int i = 1; i <= n; i++){
		for(auto [fi, se] : p[i]){
			fen.update(n+1-fi, se);
		}
		for(auto [fi, se] : que[i]){
			ans[se] = fen.sum(n+1-fi);
		}
	}
	for(int i = 1; i <= q; i++)
		cout << ans[i] << "\n";
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
//	cin >> t;
	t = 1;
	for(int i = 1; i <= t; i++) {
		solve();
	}
}

比赛打得稀烂,还是赛后好好补题吧~

5.13华为OD机试真题 新系统 - 社交网络相同爱好好友查询 (Java/Py/C/C++/Js/Go) 阅读详情

相关推荐

车机破解避坑指南:为什么你的CarPlay盒子不识别?从USB设备ID解析兼容性问题

本文深入解析车机USB设备兼容性问题,特别是CarPlay盒子不识别的原因,从硬件ID到识别机制全面剖析。通过ADB工具和root权限操作,提供详细的破解方案和兼容性测试结果,帮助用户解决车机与第三方设备的连接问题。

weixin_29175469的博客 602

平衡数组

平衡数组 给定一个长度为 n 的数组 a1,a2,…,an,其中 ai=i。 现在,请你选择一个整数 m,并对该数组进行 m 次操作。 对于第 i 次操作(i 从 1 开始计数),你需要选定其中一个元素,并将选定元素以外的其他所有元素都增加 i。 你的目标是在 m 次操作结束后,数组中各个元素的值都相等。 m 不得超过 1000。 请你输出具体合理方案。 输入格式: 第一行包含整数 T,表示共有 T 组测试数据。 每组数据占一行,包含一个整数 n。 输出格式: 每组数据输出占两行。 第一行输出操作次数 m。

qcy的博客 713

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 415

Codeforces Round #772 (Div. 2)

A. Min Or Sum (https://codeforces.com/contest/1635/problem/A)[https://codeforces.com/contest/1635/problem/A] 无限次操作,那就是最后剩一个数,其他都是0。 #include <bits/stdc++.h> using namespace std; int n; long long a[200]; void solve() { scanf("%d",&n);

hehepig的博客 327

6、基于集成学习技术的边坡稳定性预测及滑坡易发性研究

本研究基于集成学习技术对云阳县的边坡稳定性及滑坡易发性进行预测分析。通过比较SVM、RF、XGBoost和LR四种模型,发现集成学习模型在准确率和少数类识别方面表现更优。特征重要性分析表明剖面形状是影响边坡稳定性的关键因素。同时,引入基于定性分析的分区建模方法,构建父模型与子区域模型,提升了滑坡易发性制图的精度。研究成果为地质灾害的预防与管理提供了科学依据和技术支持。

peach的博客 126

手把手教你学simulink(8.3)--实例:基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真

基于 Simulink 的自动驾驶汽车速度控制系统设计与仿真。

MHD0815的博客 1208

Codeforces Round #771 (Div. 2)

A. Reverse You are given a permutation p1,p2,…,pn of length n. You have to choose two integers l,r (1≤l≤r≤n) and reverse the subsegment [l,r] of the permutation. The permutation will become p1,p2,…,pl−1,pr,pr−1,…,pl,pr+1,pr+2,…,pn. Find the lexicographical

狗蛋的博客 1022

Android 13.0 Launcher3中去掉Hotseat功能实现

在13.0系统产品定制化开发中,在Launcher3的定制化需求也是特别多的,由产品是小屏幕的产品,所以产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能

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

Codeforces 1635 F. Closest Pair —— 树状数组,思维,有一丶丶东西

This way 题意: 给你长度为n的数组x(x[i]<x[i+1])和w,对于一对i,j,定义他们的val为∣xi−xj∣∗(wi+wj)|x_i-x_j|*(w_i+w_j)∣xi​−xj​∣∗(wi​+wj​)。 每次给你l,r,问你[l,r]中val最小为多少 题解: 第一次挑战28的题目,说实话还是不够难,感觉只有25左右难度。 一开始我想到的是笛卡尔树,但是不太对劲,因为它并不是区间这种东西。 接下来我想到的是斜率优化,然后我就开始写式子…然后就写不下去了。 由于点i一定会找w比它小的

天翼之城的博客 1544

注意力机制模块:CA(坐标注意力)二次创新:融合深度可分离卷积,打造 CADS 模块

本文提出CADS模块,将坐标注意力(CA)与深度可分离卷积(DSC)深度融合,优化移动端AI部署效率。通过重构CA的计算范式,用深度卷积替代传统1×1卷积,在保持精度的同时显著降低计算开销。文章深入分析了CA的计算瓶颈和DSC的实际效率问题,详细阐述了CADS的设计原理与PyTorch实现,并提供了多组性能对比数据。该模块可直接应用于YOLO、UNet等主流模型,为移动端AI部署提供高效解决方案。

ZXSXJ的博客 96

手把手教你学Simulink--移动机器人多轮协同场景实例:基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真

本文介绍了基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真系统。针对移动机器人存在的电机参数不一致、负载分配不均等问题,提出主从同步+力矩补偿的协同控制策略。通过搭建包含运动学模型、PMSM电机模型和矢量控制器的仿真系统,实现了速度同步误差<0.005m/s、轨迹跟踪误差<0.8cm、能耗降低12.5%的优化效果。文章详细阐述了建模步骤、核心算法实现和性能验证,为移动机器人动力系统设计提供了实用参考方案。

MHD0815的博客 131

CodeForces 312C The Closest Pair(构造)

题意:给你一个程序,要求让你出一组数据,使得这组数据会让程序的tot超过k 思路:很显然我们可以发现,他只是比较了x之间的距离,那么我们可以构造出所有点的x都相同,y都不相同的数据就好了,这样任意两个点的距离一定是大于任意两个点的x坐标之差的 #include using namespace std; #define LL long long int main() { LL n,k;

围巾的ACM博客 663

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

Mysssone的博客 187

精雕软件(JDpaint) 5.5 绿色版

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

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

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

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

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

wuqingyigexiaoba的博客 274

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

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

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

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

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

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

2503_92261635的博客 19

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

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

2301_81429079的博客 643

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

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

wuqingyigexiaoba的博客 367

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

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

2501_94316951的博客 164

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

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

weixin_44218929的博客 81

算法日常・每日刷题--<动态规划>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的博客 177

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

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

Keven_11的博客 317

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 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的博客 150

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

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

谁呀!的博客 394

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

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

wdf8088的博客 165

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

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

Jayson 博客 331
上一篇: Eclipse中没有server的解决办法
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值