2022暑期杭电第九场

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

1003题

Fast Bubble Sort

原题链接

题目大意

定义 B ( A ) B(A) B(A)是对序列 A A A进行一次冒泡排序

冒泡排序

可以对序列进行区间左右移动 1 1 1 个单位长度(数组区间循环移位)
现在给出一个序列,对任意区间提问,求有最小可以用几次上述操作就可以做到使 P [ l . . . r ] P[l...r] P[l...r] 变为 B ( P [ l . . . r ] ) B(P[l...r]) B(P[l...r])

思路

在样例中:
P ( 3 , 7 , 9 , 2 , 6 , 4 , 5 , 8 , 10 , 1 ) = 3 , 7 , 2 , 6 , 4 , 5 , 8 , 9 , 1 , 10 P(3,7,9,2,6,4,5,8,10,1)=3,7,2,6,4,5,8,9,1,10 P(3,7,9,2,6,4,5,8,10,1)=3,7,2,6,4,5,8,9,1,10
我们发现有很大一块是在左右两侧的序列中是相同的,这一段是 2 , 6 , 4 , 5 , 8 2,6,4,5,8 2,6,4,5,8。
我们观察到左侧的序列变为右侧的序列时,这一段是向左移动了一位,然后 9 9 9就会放在这一段序列后面。
那看上去我们把数组划分成若干段,每一段都是数组向左移动一位:
3 ∣ 7 ∣ 9 , 2 , 6 , 4 , 5 , 8 ∣ 10 , 1 3|7|9,2,6,4,5,8|10,1 3∣7∣9,2,6,4,5,8∣10,1

发现

  1. 每一段的开头组成了以第一个数 3 3 3为起始点的最长上升子序列
  2. 并且我们发现每一段最开始的节点会被换到这一段的最后面,例如 9 9 9换到了 8 8 8 后,也就是这一段序列左移一位(如果这一段长度为一,那可以不用移动)
  3. 每一段的最大值是这一段的起始值,且要小于下一段的起始值

考虑到数据量比较大,这时候一般就开始思考

  1. 如何才能合并区间答案

  2. 如何才能做到把一个点添加到这段序列并且同时维护答案

发现 1 1 1 操作需要考虑太多情况,每段区间所需要记忆的变量太多了,所以排除 1 1 1 方案
于是开始思考 2 2 2 方案:
先从左往右考虑,如果在序列的右侧添加一个新的值,则会导致每一个左端点到当前点划分的情况都不相同,所以还是很难。
换思路:如果我们是从左侧添加一个新的值,就会发现从左端点到右侧任意一个端点划分的情况只是相当于把右端点更远的划分情况截断了一部分,即对于这两个序列共有的前缀,他们有一个共同的划分方法。

那或许我们应当从右到左的思考:
我们想这个数组是如何划分出来的:

  1. 如果有一个序列,左侧希望添加一个值,这个值比右边的数小,则这个数单独看作一段
  2. 否则,就会把右侧所有比他小的值与这个值一起划分成一段

把每一段的第一个值抽出来,很明显就是一个单调栈,维护了最大值(在样例中为 3 , 7 , 9 , 10 3,7,9,10 3,7,9,10 )

既然单调栈都出来了,且查询量为 1 e 5 1e5 1e5,那我们就直接不演了,直接开始考虑线段树(等)+单调栈
(这种方法主要思想:从 n n n 到 1 1 1 依次扫描左端点 l l l,维护每个右端点上的答案 a n s R [ ] ansR[] ansR[],则当 l l l 在 q l ql ql 时,如果查询 [ q l , q r ] [ql,qr] [ql,qr] 的答案,只需要查询 a n s R [ q r ] ansR[qr] ansR[qr] 上的值即可,也就是说,这种方法需要离线询问。虽然其实在线询问也可以,上述操作可持久化就行)
(这样想的原理是:单调栈上每个元素都可以对应到一段区间上去,可以把单调栈的 p u s h push push 和 p o p pop pop 操作与线段树的区间修改操作绑定,同步进行,如果 p u s h push push 就添加标记,如果 p o p pop pop 就收回标记)
我们思考添加的这个值会对右侧所有答案造成什么影响(也就是左边界 i i i 变为 i − 1 i-1 i−1 时,所有右边界上的答案 a n s R [ ] ansR[] ansR[] 会怎么变)

懒得思考,打个暴力先:

int q;
cin >> n >> q;
rep(i, 1, n) cin >> p[i];
for (int i = n; i; --i) {
    cout << "L:" << i << "\tansR[]:{ ";
    for (int j = 1; j <= n; ++j) {
        if (j < i) {
            cout << "0 ";
            continue;
        }
        int t = p[i], ans = 0, flag = 1;
        for (int k = i + 1; k <= j; ++k) {
            if (p[k] > t)
                t = p[k], flag = 1;
            else if (flag)
                ++ans, flag = 0;
        }
        cout << ans << " ";
    }
    cout << "}";
    cout << endl;
}
/*
输入:
10 0
3 7 9 2 6 4 5 8 10 1
输出:
L:10    ansR[]:{ 0 0 0 0 0 0 0 0 0 0 }
L:9     ansR[]:{ 0 0 0 0 0 0 0 0 0 1 }
L:8     ansR[]:{ 0 0 0 0 0 0 0 0 0 1 }
L:7     ansR[]:{ 0 0 0 0 0 0 0 0 0 1 }
L:6     ansR[]:{ 0 0 0 0 0 0 0 0 0 1 }
L:5     ansR[]:{ 0 0 0 0 0 1 1 1 1 2 }
L:4     ansR[]:{ 0 0 0 0 0 1 1 1 1 2 }
L:3     ansR[]:{ 0 0 0 1 1 1 1 1 1 2 }
L:2     ansR[]:{ 0 0 0 1 1 1 1 1 1 2 }
L:1     ansR[]:{ 0 0 0 1 1 1 1 1 1 2 }
*/

我们发现

  1. 如果新添加的这个点所在区间长度并不是 1 1 1,则从这个点往后所有点的答案都会加一

  2. 否则,所有 a n s R [ ] ansR[] ansR[] 都不会变动

于是我们便可以在 p u s h push push单调栈的时候同时操作一下树状数组,把 i + 1 i+1 i+1 到 n n n 的位置上的 a n s R [ ] ansR[] ansR[] 都加一
然后 p o p pop pop 单调栈时做反向操作,撤回对应区间上的贡献 1 1 1 即可
(树状数组既然要区间修改,单点查询,那就用树状数组维护前缀和就行)
这样做的正确性在于:

  1. 如果当前这一位添加到原有的序列,且这一位所在的段只有他自己,那所有包含他的区间答案数并不会改变,因为这一位不需要区间左右移动
  2. 否则,就会把一些靠左的区间删除掉,删除后,以当前这个值作为开头的那一段上除去这个值所有的答案都会加一,因为他们既然在一个区间内,那就需要把当前值换到这一段的末尾才行。如: 9 , 2 , 6 , 4 , 5 9,2,6,4,5 9,2,6,4,5, 9 , 2 , 6 , 4 9,2,6,4 9,2,6,4都需要把 9 9 9 挪到最后面,所以 5 5 5, 4 4 4 所在位置上的 a n s R ansR ansR 都会增加 1 1 1
    然后其他的区间段虽然他们自己都不用移动,或者移动次数已经算在答案里了,但是他们的答案内还缺一个把当前这个值移动到所在段最后一个位置所消耗的 1 1 1 的代价。综上所述,这种情况下需要对当前这一位的下一位开始所有的位置上答案数 a n s R ansR ansR 都 + 1 +1 +1

代码

#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (int i = a, i##end = b; i <= i##end; ++i)
#define per(i, b, a) for (int i = a, i##end = b; i >= i##end; --i)
typedef long long LL;
#define endl '\n'
const int INF = 1e9 + 7;
const int LIM = 1e5 + 10;
typedef pair<int, int> pii;
template <class T>
class fenwick {
    vector<T> c;
    int n;

   public:
    fenwick(int n) : c(n + 1), n(n) {}
    void add(int x, T val) {
        assert(0 < x);
        // assert(x <= n);
        for (; x <= n; x += x & -x) c[x] += val;
    }
    T sum(int x) {
        // assert(0 <= x && x <= n);
        T ans = 0;
        for (; x; x -= x & -x) ans += c[x];
        return ans;
    }
};
int p[LIM], n;
vector<pii> Q[LIM];
int ans[LIM];
void solve() {
    int q;
    cin >> n >> q;
    rep(i, 1, n) cin >> p[i];
    rep(i, 1, n) Q[i].clear();
    rep(i, 1, q) {
        int l, r;
        cin >> l >> r;
        Q[l].push_back({r, i});
    }
    stack<pii> MAX;
    fenwick<int> tmp(n); // 就是ansR[]
    MAX.push({INF, n + 1});
    for (int i = n; i; --i) {
        while (MAX.top().first < p[i]) {
            int l = MAX.top().second, r;
            MAX.pop();
            r = MAX.top().second;
            if (l + 1 == r) continue;
            tmp.add(l + 1, -1); // ansR[l+1...n]--(撤回标记)
        }
        if (i + 1 != MAX.top().second) tmp.add(i + 1, 1); // ansR[i+1...n]++
        MAX.push({p[i], i});
        for (auto p : Q[i]) ans[p.second] = tmp.sum(p.first);
    }
    for (int i = 1; i <= q; ++i) cout << ans[i] << endl;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    rep(i, 1, t) solve();
} 
 

好像有树上倍增的解法

1007题

Matryoshka Doll——线性DP

原题链接

题目大意

​ T T T 组样例,每组给 n 、 k 、 r n、k、r n、k、r 三个数和一个大小为 n n n 的升序数组,要求将数组分为 k k k 组,每组都是升序且相邻两元素差值不能小于 r r r。

思路

考虑DP,设f[i][j]=前i个数分成j组时的情况数
例:

4 3 3
1 2 3 4 5 6 7
1 1 1 1 1 1 2 2 2 2 
分2组
1 3 | 2 4
f[4][2]=1
分3组
1 3 | 2 | 4
1 4 | 2 | 3
2 4 | 1 | 3
f[4][3]=3
分4组
1 | 2 | 3 | 4
f[4][4]=1 

观察得i扩展时元素a[i]有两种决策:

  1. 单独成组
  2. 和前面的成组

决策1无限制, f [ i ] [ j ] + = f [ i − 1 ] [ j − 1 ] f[i][j] += f[i-1][j-1] f[i][j]+=f[i−1][j−1]。
决策2显然受到 r r r 的限制,观察前 i − 1 i-1 i−1 个数的分组情况,发现前 i − 1 i-1 i−1 个元素的所有合法答案中,和i不相容的元素必然单独分列在一些组的末尾,没有在同一组的情况。这是因为这些元素受r的限制同时又和i冲突,则其值有( a [ i ] − r , a [ i ] a[i]-r,a[i] a[i]−r,a[i] ]的范围限制,故两两冲突不能在同一组。
去除不相容的组后,元素 a [ i ] a[i] a[i] 可以接在任一组后, f [ i ] [ j ] + = f [ i − 1 ] [ j ] ∗ ( j − ( a [ 0 ]   a [ i − 1 ] f[i][j] += f[i-1][j]*(j-(a[0]~a[i-1] f[i][j]+=f[i−1][j]∗(j−(a[0] a[i−1] 中和 a [ i ] a[i] a[i] 冲突的部分));

初值: f [ 0 ] [ 0 ] = 1 初值:f[0][0]=1 初值:f[0][0]=1
最终值: f [ n ] [ k ] = n 个数分成 k 组的情况数 最终值:f[n][k]=n个数分成k组的情况数 最终值:f[n][k]=n个数分成k组的情况数
转移方程:
f [ i ] [ j ] + = f [ i − 1 ] [ j − 1 ] ∗ 1 f[i][j] += f[i-1][j-1]*1 f[i][j]+=f[i−1][j−1]∗1
f [ i ] [ j ] + = f [ i − 1 ] [ j ] ∗ ( j − ( a [ 0 ]   a [ i − 1 ] 中和 a [ i ] 冲突的部分 ) ) ; f[i][j] += f[i-1][j]*(j-(a[0]~a[i-1]中和a[i]冲突的部分)); f[i][j]+=f[i−1][j]∗(j−(a[0] a[i−1]中和a[i]冲突的部分));
伪代码:

f[0][0]=1; 
for i in 1...n
f[i][j] = f[i-1][j-1];
f[i][j] +=f[i-1][j]*(j-fal[i]);
f[i][j] %=mod;

优化:
如果理解了上面的转移方程,就会发现转移只和 j / j − 1 j/j-1 j/j−1有关,于是可以将 f [ i ] f[i] f[i] 这一维省略,优化空间。注意 f [ 0 ] f[0] f[0] 此时不能设为 1 1 1,因为只有 f [ 0 ] [ 0 ] = 1 f[0][0]=1 f[0][0]=1,于是需要稍微处理一下,发现 1 1 1 个元素时只有分 1 1 1 组的 1 1 1 种情况,故:
初值: f [ 1 ] = 1 ( f [ 1 ] [ 1 ] = 1 ) 初值:f[1]=1 (f[1][1]=1) 初值:f[1]=1(f[1][1]=1)
最终值: f [ k ] ( f [ n ] [ k ] ) 最终值:f[k] (f[n][k]) 最终值:f[k](f[n][k])
伪代码:

for j in 2...n
f[j] *= (j-fal[i]);
f[j] += f[j-1];
f[j] %=mod;

代码

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
inline int min(int a,int b)
{
	return a<b?a:b;
}
const int mod=998244353;
int arr[5005],fal[5005];
ll f[5005];
int main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,k,r;
		scanf("%d%d%d",&n,&k,&r);
		memset(f,0,sizeof(*f)*(n+1)); 
		for(int i=1;i<=n;i++)
		{
			scanf("%d",arr+i);
		}
		for(int i=1,p=1;i<=n;i++)
		{
			while(arr[i]-arr[p]>=r)p++;
			fal[i]=i-p;
		}
		f[1]=1;
		for(int i=2;i<=n;i++)
		{
			for(int j=min(i,k);j;j--)
			{
				f[j] *= (j-fal[i]);
				f[j] += f[j-1];
				f[j] %=mod;
			}
		}
		printf("%lld\n",f[k]);
	}
	return 0;
}

1008题

Shortest Path in GCD Graph

题目链接

题目大意:

给出 n n n 个点,每个点的值为 1 − n 1-n 1−n 且不重复,任意两个点都有一条边,边权为两个点值的 $gcd#

每次询问会给出两个点,要求你求出这两点间的最短距离以及最短距离路径的个数

思路:

询问时,若询问的两个点互质,则为 x − > y x->y x−>y 为最短路,长度为 1 1 1

若询问的两个点不互质,则 x x x 到 y y y 最短长度为 2 2 2,因为总有 x − > 1 − > y = = 2 x->1->y==2 x−>1−>y==2,所以只要找到所有与 x , y x,y x,y同时互质的数的个数

分别求两个数的质因数并去重,利用容斥原理求出能整除这些质因数的数量,再用 n n n 减去,便得出答案

注意,若 x x x 和 y y y 的 g c d gcd gcd 为 2 2 2,则答案需要加一

代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<set>
#include<fstream>
#define int long long
using namespace std;
const int N = 1e7 + 10;
const int mod = 998244353;
int prime[N],f[N],ans;
int n, q;
bool isprime[N];
set<int> s;
vector<int> a;
void init(int n)
{
	isprime[1] = 1;
	int cnt = 0;
	for (int i = 2; i <= n; ++i)
	{
		if (!isprime[i])
		{
			prime[++cnt] = i;
			f[i] = i;
		}
		for (int j = 1; j <= cnt && prime[j] <= n / i; ++j)
		{
			isprime[prime[j] * i] = 1;
			f[prime[j] * i] = prime[j];
			if (i%prime[j] == 0) break;
		}
	}
}
int gcd(int a, int b)
{
	return b ? gcd(b, a%b) : a;
}
void zhi(int x)
{
	while (x > 1)
	{
		int t = f[x];
		if (!s.count(t)) s.insert(t);
		while (!(x%t)) x /= t;
	}
}
void dfs(int x, int s, int p,int len)
{
	if (x == len)
	{
		ans += p * (n/s);
		ans %= mod;
		return;
	}
	dfs(x + 1, s, p, len);
	if (s <= n / a[x]) dfs(x + 1, s*a[x], -p, len);
}
void suan(int x, int y,int n)
{
	s.clear(),a.clear(),ans=0;
	zhi(x),zhi(y);
	int len = s.size();
	ans = 0;
	for (auto i : s) a.push_back(i);
	dfs(0, 1, 1,len);
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> q;
	init(n);
	for (int i = 1; i <= q; ++i)
	{
		int x, y;
		cin >> x >> y;
		int g = gcd(x, y);
		if (g == 1) {
			cout << 1 << ' ' << 1 << endl;
		}
		else
		{
			suan(x, y,n);
			if (g == 2) ans++;
			cout << 2 << ' ' << ans << endl;
		}
	}
	return 0;
}

1010题

Sum Plus Product

题目链接

题目大意

给定一个长度为 n n n 的数组,每次随机拿出两个数使其变成 ( a + b + a ∗ b ) (a + b + a * b) (a+b+a∗b)再放回数组,最终数组中只剩下一个数,求剩余数字的期望是多少。

思路

先探索一下三个球的情况
_ABCO_6_131YYT4Z_O_6QXX.png

发现经过操作的两个球得到的答案具有“轮换性”——任意交换两个字母,多项式不变,这就意味着交换两个球的操作次序,答案是唯一的,因此我们产生最终剩余的球的数字与先操作后操作哪个球无关的猜测。但是我们这里只做了 a a a 与 b b b, a b ab ab 与 c c c, a b c abc abc 与 d d d 这样的操作,但还有 a a a 与 b b b , c c c 与 d d d , a b ab ab 与 c d cd cd这样的方式我们没有讨论到,下面做出粗糙的证明。

大概证明:

①首先我们知道包含n个字母的多项式最多有的项数是:
C n 1 + C n 2 + C n 3 + . . . + C n n = 2 n − 1 C_{n}^{1}+C_{n}^{2}+C_{n}^{3}+...+C_{n}^{n}=2^n-1 Cn1​+Cn2​+Cn3​+...+Cnn​=2n−1

②每次两个球操作所产生新小球的每一项都不会相同(因为字母不同)

③一个含x个字母的球与一个含y个字母的球进行操作得到的新小球含多少项?

根据①两个球分别有 2 x − 1 2^x-1 2x−1, 2 y − 1 2^y-1 2y−1项

那么相加就有 2 x − 1 + 2 y − 1 2^x-1+2^y-1 2x−1+2y−1项,相乘有 ( 2 x − 1 ) ∗ ( 2 y − 1 ) (2^x-1)*(2^y-1) (2x−1)∗(2y−1)项

答案是: 2 x − 1 + 2 y − 1 + ( 2 x − 1 ) ∗ ( 2 y − 1 ) = 2 ( x + y ) − 1 2^x-1+2^y-1+(2^x-1)*(2^y-1)=2^(x+y)-1 2x−1+2y−1+(2x−1)∗(2y−1)=2(x+y)−1

正好等于①含x+y个字母的球的最大项数!并且有②,每一项都不同,那么这个球一定是一个“轮换性”的多项式!
这就说明了两个含任意数量字母的“轮换性”球进行操作,得到的新球也具有“轮换性”,那么根据归纳最终的球也具有“轮换性”,这样就证明了答案与操作目标、顺序无关。

代码就很简单了,从头操作到尾就行了。

代码

#include<bits/stdc++.h>
using namespace std;
int n,a[510];
const int mod=998244353;
void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    long long ans=a[1];
    for(int i=2;i<=n;i++)
    {
        ans=(ans+a[i]+ans*a[i]%mod)%mod;
    }
    cout<<ans<<endl;
}
int main()
{
    int test;
    cin>>test; 
    while(test--)
    {
        solve();
    }
}
Qt入门教程100篇(已完结) Qt5入门教程,Qt6入门教程。包含了: Qt环境搭建篇、Qt数据类型篇、Qt中STL篇、Qt核心篇、Qt核心对象QObject篇、Qt基础控件篇、Qt对话框篇、Qt高级控件篇、Qt数据模型篇、QSS篇、Qt文件篇 、Qt硬件编程、Qt的一些demo、Qt项目开发篇。...... 阅读详情

相关推荐

Llama模型结构拆解:为什么MLP模块要这样设计?从参数配置到计算流程全解析

本文深入解析了Llama模型MLP模块的设计精髓。通过拆解其三线性层结构、门控机制与SwiGLU激活函数,揭示了并行计算如何提升效率,并详细阐述了intermediate_size参数配置背后的经验权衡与计算考量,帮助读者透彻理解这一核心组件的设计逻辑与工程实现。

mac99的博客 529

2022杭电多校九 1003-Fast Bubble Sort(倍增+单调栈)

题目大意:首先说明一个性质,A表示一个数组,B(A)表示把这段数组进行一遍冒泡排序的下沉操作,就是把大数沉底。然后题目给我们一个长度为n的数组,给我们q个询问,每个询问包含一个l,r问我们将[l,r]区间内的数变成具有上述性质的区间至少需要几步操作,每次操作如下:选取一段区间,可以将区间的第一个数字放到这段区间的最后或者是将区间的最后一个数放到区间首部。

weixin_54562114的博客 289

FortiOS路径遍历漏洞CVE-2022-41328实战复现:从环境搭建到漏洞利用全记录

本文深入解析FortiOS路径遍历漏洞CVE-2022-41328,从漏洞背景、影响范围到技术原理进行全面剖析。提供详细的漏洞复现环境搭建步骤和实战利用方法,并给出官方修复方案与临时缓解措施,帮助企业有效防御此类防火墙漏洞风险。

weixin_30485379的博客 523

2022杭电多校9 Matryoshka Doll

状态转移:dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*(j-temp),意思是当前第i个套娃可以单独作为一组,也可以和之前的套娃共同作为一组,temp表示对于1

weixin_54562114的博客 445

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 744

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

2022“杭电杯”中国大学生算法设计超级联赛(9)签到题4题

2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)2022“杭电杯”中国大学生算法设计超级联赛(9)...

小哈里的博客 1624

告别Link180!在Ansys Mechanical 2020R2中正确启用Cable280绳索单元(附Beta选项开启指南)

本文详细介绍了在Ansys Mechanical 2020R2中启用Cable280绳索单元的全过程,包括Beta选项的开启步骤、建模技巧及高阶应用。Cable280作为专为绳索仿真设计的单元,相比传统的Link180单元,在大变形模拟和计算效率上表现更优,特别适合斜拉桥、电梯牵引绳等工程场景。

weixin_33711647的博客 405

2022”杭电杯“中国大学生算法设计超级联赛(9)1 3 7题解

1001题解 分治法

Shanhj的博客 603

YOLOv11改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 779

【即插即用模块】注意力篇 | TGRS 2025 | MFA聚特征+HPDown保细节+HFF融层级,三大模块各司其职,性能翻倍!

本文介绍了MTMLNet网络中的三大核心模块:MFA(多阶段特征聚合)、HPDown(混合池化下采样)和HFF(分层特征融合)。MFA通过双尺度深度卷积和注意力机制增强特征提取能力;HPDown结合平均池化和最大池化,有效保留下采样过程中的特征信息;HFF采用三注意力机制实现自适应特征融合。这三个模块协同工作,在红外小目标检测与分割任务中取得了SOTA效果。实验表明,各模块在特征提取、信息保留和融合方面均优于传统方法,可灵活应用于各类视觉任务中。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 286

2022“杭电杯”中国大学生算法设计超级联赛(9)

2022“杭电杯”中国大学生算法设计超级联赛(9)

Troye的博客 471

【AgentScope 2.0】01-不搭 demo,直接解剖一个生产级 Agent 平台:loser-agent 全链路地图

本文介绍生产级Agent平台loser-agent的完整请求旅程,从用户发消息到返回结果共七站:入口鉴权、灰度路由、Agent装配、模型路由、工具执行、持久化与流式响应。课程以真实源码为线索,深入剖析每一步实现逻辑,涵盖灰度发布、权限控制、HITL审批、多模态处理、状态持久化等核心能力。强调框架仅负责Agent运行时语义,平台自建管理请求生命周期中所有非框架部分,适合Java后端开发者系统掌握Agent工程化落地。

loser.with.m的博客 725

2022杭电多校联赛第九场 题解

杭电9

weixin_51937688的博客 1226

WINCC7.3破解文件

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

2022 年杭电多校第九场补题记录

2022 年杭电多校第九场补题记录

m0_52048145的博客 1020

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

杭电多校-Matryoshka Doll-(dp+巧妙思维)

就是给你n个盒子,每个盒子有个空间,如果a盒子可以装下b盒子当且仅当a-b>=k。现在让你把这些盒子分成m组,每组比如为a b c d,那么需要b装下a,c装下b,d装下c。问你一共有多少种分法。两个组是否不同只看盒子编号不看顺序。...

m0_52398496的博客 597

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

Mysssone的博客 228

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

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

wuqingyigexiaoba的博客 315

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

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

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

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

2503_92261635的博客 21

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

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

2301_81429079的博客 750

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

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

wuqingyigexiaoba的博客 371

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 412

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

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

2501_94316951的博客 172

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

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

weixin_44218929的博客 85

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

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 219
上一篇: 2022暑期牛客第七场
下一篇: 2022暑期杭电第十场
TGUACM_admin
博客等级 码龄4年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值