Codeforces Round 935 (Div. 3) A~F

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

A.Setting up Camp(思维)

题意:

组委会计划在游览结束后带领奥林匹克运动会的参赛选手进行徒步旅行。目前,正在计算需要的帐篷数量。据了解,每个帐篷最多可容纳333人。

在参赛者中,有aaa个内向者,bbb个外向者,ccc个普通人:

  • 每个内向者都想独自住在帐篷里。因此,内向者的帐篷里必须只有一个人–只有内向者自己。
  • 每个外向的人都想和另外两个人住在一个帐篷里。因此,一个外向者的帐篷里必须正好有三个人。
  • 每个人都可以选择任何一种方式(独居、与他人同住或与他人同住)。

组委会非常尊重每位参赛者的意愿,因此他们希望满足所有参赛者的愿望。

请告诉我们至少需要多少顶帐篷,以便所有参加者都能根据自己的喜好找到住处。如果无法满足所有参与者的愿望,输出−1-1−1。

分析:

内向者一人一个帐篷,普通人哪里不够塞哪里。外向者必须三人一个帐篷,优先给外向者三人分一个帐篷,若剩下不足三人,用普通人补上,如果补不上,就无解,否则有解。

代码:

#include<bits/stdc++.h>

using namespace std;

int main() {
    int t;
    cin >> t;
    while (t--) {
        int a, b, c;
        cin >> a >> b >> c;
        int d = (3 - b % 3) % 3;
        int ans = a + (b + c + 2) / 3;
        if (d > c)
            cout << -1 << endl;
        else
            cout << ans << endl;
    }
    return 0;
} 

B.Fireworks(贪心)

题意:

徒步旅行的其中一天恰逢节假日,因此决定晚上在营地安排一场节日焰火表演。为此,徒步旅行的组织者购买了两个烟花发射装置和大量的烟花弹。

两个装置同时开启。第一个装置每隔aaa分钟(即发射后a,2⋅a,3⋅a,…a,2\cdot a,3\cdot a,\dotsa,2⋅a,3⋅a,…分钟)发射一次烟花。第二个装置每隔bbb分钟(即发射后b,2⋅b,3⋅b,…b,2\cdot b,3\cdot b,\dotsb,2⋅b,3⋅b,…分钟)发射一次烟花。

每个烟花在发射后的m+1m+1m+1分钟内都可以在天空中看到,也就是说,如果一个烟花是在装置开启后的xxx分钟后发射的,那么从xxx到x+mx+mx+m(包括首尾两分钟),每分钟都可以看到一个烟花。如果一个烟花在另一个烟花mmm分钟后发射,则两个烟花的可见时间均为一分钟。

天空中最多可以同时看到多少枚烟花?

分析:

题意可以转换为找一个时间段,长为m+1m+1m+1,使得这个时间段上释放的烟花最多。贪心的想,这个时间段左端点应该是两个烟花同时释放,因此aaa和bbb的最小公倍数即是两个烟花同时释放的时刻。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

int main() {
    int t;
    cin >> t;
    while (t--) {
        LL a, b, m;
        cin >> a >> b >> m;
        cout << (m + a) / a + (m + b) / b << endl;
    }
    return 0;
}

C.Left and Right Houses(前缀和)

题意:

莱托沃村有nnn栋房子。村民们决定修建一条大路,将村庄分为左右两边。每个居民都想住在街道的右侧或左侧,这可以描述为一个序列a1,a2,…,ana_1,a_2,\dots,a_na1​,a2​,…,an​,如果jjj这栋房子的居民想住在街道的左侧,则为aj=1a_j=1aj​=1;否则为aj=0a_j=0aj​=0。

道路将从两栋房子之间穿过。左边的房子将被宣布为左侧,右边的房子将被宣布为右侧。更具体地说,让道路从房屋iii和i+1i+1i+1之间通过。那么位于111和iii之间的房屋将位于街道的左侧,位于i+1i+1i+1和nnn之间的房屋将位于街道的右侧。在这种情况下,整个村庄将被分割为右侧或左侧。

为了使设计公平,我们决定在铺设道路时,至少要让村子两边各一半的居民对选择感到满意。也就是说,在一边的xxx居民中,至少有⌈x2⌉\lceil\frac{x}{2}\rceil⌈2x​⌉希望住在那一边,其中⌈x⌉\lceil x\rceil⌈x⌉表示四舍五入的实数xxx。

在路的左边,会有iii幢房子,在相应的aja_jaj​中,至少要有⌈i2⌉\lceil\frac{i}{2}\rceil⌈2i​⌉个000。路的右边有n−in-in−i座房子,在相应的aja_jaj​中至少要有⌈n−i2⌉\lceil\frac{n-i}{2}\rceil⌈2n−i​⌉个111。

确定在哪座房子iii之后铺设道路,以满足所述条件,并尽可能靠近村庄中央。形式上,在所有合适的位置iii中,最小化∣n2−i∣\left|\frac{n}{2}-i\right|​2n​−i​。

如果有多个合适的位置iii,最小值∣n2−i∣\left|\frac{n}{2}-i\right|​2n​−i​,则输出较小的一个。

分析:

分割一个序列,使其左半部分的000要多于111,右半部分的111要多于000。
前缀和统计000和111的数量,然后枚举分割线的位置即可。

代码:

#include<bits/stdc++.h>

using namespace std;

void solve() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    s = " " + s;
    vector<int> num0(n + 1), num1(n + 1);
    for (int i = 1; i <= n; i++) {
        if (s[i] == '0')
            num0[i]++;
        else
            num1[i]++;
        num0[i] += num0[i - 1];
        num1[i] += num1[i - 1];
    }
    int pos = -1;
    if (num1[n] >= (n + 1) / 2) pos = 0;
    for (int i = 1; i <= n; i++) {
        int suml = num0[i];
        int sumr = num1[n] - num1[i];
        if (suml >= (i + 1) / 2 && sumr >= (n - i + 1) / 2) {
            if (pos == -1)
                pos = i;
            else {
                double dis0 = abs(double(n) / 2 - i);
                double dis1 = abs(double(n) / 2 - pos);
                if (dis0 < dis1)
                    pos = i;
            }
        }
    }
    cout << pos << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

D.Seraphim the Owl(思维)

题意:

大家排成长度为nnn的一队,从i=1i=1i=1号开始,向猫头鹰谢拉菲姆请教生命的意义。不幸的是,基里尔当时正忙着为这个问题编写传说,所以他来得晚了一些,站在了这nnn个人之后,排在了队伍的最后。基里尔对这种情况完全不满意,于是他决定贿赂一些排在他前面的人。

对于队列中的第iii个人,基里尔知道两个值:aia_iai​和bib_ibi​。如果此刻基里尔站在位置iii上,那么他可以选择任意一个位置jjj,并与位置jjj的人交换位置。在这种情况下,基里尔需要支付他aja_jaj​个金币。而对于j<k<ij\lt k\lt ij<k<i的每一个kkk,基里尔都要向位置kkk的人支付bkb_kbk​个金币。基里尔可以多次执行这个操作。

基里尔很节俭,所以他想花尽可能少的硬币,但是他又不想等太久,所以基里尔认为他应该排在mmm人的前面。

请帮助基里尔确定,为了不等太久,他最少需要花费多少金币。

分析:

当i>mi>mi>m时 如果想跟第iii个人换位是不影响第i+1i+1i+1个人的决策的,也就是说可以先和第i+1i+1i+1个人换位再换到iii,也可以直接换到iii。以此类推大于mmm时直接取aia_iai​和bib_ibi​的最小值即可。

枚举停在前面所有位置上时的花费,不过发现只有停到的某个位置iii上必须支付aia_iai​以外,后面 i+1∼ni+1∼ni+1∼n的位置的代价都是aj,bja_j,b_jaj​,bj​值取其小值。所以我们从后向前枚举iii,后面部分的代价是不会变的,直接累加起来即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL N = 2e5 + 5;
const LL inf = 0x3f3f3f3f3f3f3f;

int n, m;
LL a[N], b[N];

void solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++)
        cin >> b[i];
    LL sum = 0;
    LL mx = inf;
    for (int i = m + 1; i <= n; i++)
        sum += min(a[i], b[i]);
    for (int i = n - 1; i; i--)
        b[i] += b[i + 1];
    b[n + 1] = 0;
    for (int i = 1; i <= m; i++) {
        mx = min(a[i] + b[i + 1] - b[m + 1] + sum, mx);
    }
    cout << mx << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

E.Binary Search(二分)

题意:

安东在徒步旅行中感到无聊,想解决一些问题。他问基里尔有没有新问题,基里尔当然有。

给你一个大小为nnn的排列数ppp和一个需要找到的数字xxx。长度为nnn的排列是由nnn个不同的整数组成的数组,这些整数从111到nnn按任意顺序排列。例如,[2,3,1,5,4][2,3,1,5,4][2,3,1,5,4]是一个排列,但[1,2,2][1,2,2][1,2,2]不是一个排列(222在数组中出现了两次),[1,3,4][1,3,4][1,3,4]也不是一个排列(n=3n=3n=3,但数组中有444)。

你认为自己是一个很酷的程序员,所以你将使用一种高级算法进行搜索–二分查找。但是,你忘了二分查找必须对数组进行排序。

为了得到正确的答案,你可以在运行算法前执行不超过222次的以下操作:选择索引iii,jjj(1≤i,j≤n1\le i,j\le n1≤i,j≤n),并交换位置iii和jjj的元素。

然后进行二分查找。在算法开始时,声明了两个变量l=1l=1l=1和r=n+1r=n+1r=n+1。然后执行以下循环:

  1. 如果r−l=1r-l=1r−l=1,结束循环
  2. m=⌊r+l2⌋m=\lfloor\frac{r+l}{2}\rfloorm=⌊2r+l​⌋
  3. 若pm≤xp_m\le xpm​≤x,赋值l=ml=ml=m,否则r=mr=mr=m。

我们的目标是在算法之前重新排列排列组合中的数字,以便在算法执行之后,plp_lpl​等于xxx。可以证明,222次运算总是足够的。

分析:

手推一下,整个区间的大部分数都是没用的,可以发现整个过程中mmm一定不会等于111,因为只有当L=1L=1L=1,R=2R=2R=2时(L+R)/2(L+R)/2(L+R)/2才会等于111,但是R−L=1R-L=1R−L=1时会终止,所以把xxx换到位置111能保证xxx不出现在二分的过程中。然后模拟一遍二分的过程找出最终的LLL,交换111和LLL的位置即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL mod = 998244353;
const LL N = 2e5 + 5;

int n, m;
int a[N], pos[N];

void solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        pos[a[i]] = i;
    }
    cout << 2 << endl;
    int l = 1;
    int r = n + 1;
    int mid;
    cout << 1 << ' ' << pos[m] << endl;
    swap(a[1], a[pos[m]]);
    while (r - l != 1) {
        mid = l + r >> 1;
        if (a[mid] <= m)
            l = mid;
        else
            r = mid;
    }
    cout << l << ' ' << 1 << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

F.Kirill and Mushrooms(思维)

题意:

营地里的人一睡着,基里尔就偷偷溜出帐篷,去智慧橡树那里采蘑菇。

众所周知,橡树下生长着nnn种蘑菇,每种蘑菇都有神奇的力量viv_ivi​。基里尔非常想用这些蘑菇制作一种魔力最大的灵药。

灵药的强度等于其中蘑菇的数量与这些蘑菇中最小魔力的乘积。要配制灵药,基里尔要依次采摘生长在橡树下的蘑菇。基里尔可以按照任何顺序采集蘑菇。

然而,事情并非如此简单。智慧橡树告诉基里尔从111到nnn的数字ppp的排列组合。如果基里尔只采摘kkk个蘑菇,那么所有指数为p1,p2,…,pk−1p_1,p_2,\dots,p_{k-1}p1​,p2​,…,pk−1​的蘑菇的魔力就会变成000。基里尔不会使用魔力为零的蘑菇来配制灵药。

你的任务是帮助基里尔采集蘑菇,使他能够酿造出最大魔力的灵药。不过,基里尔有点害怕在橡树附近逗留太久,所以在所有合适的采集蘑菇的选项中,他要求你找到蘑菇数量最少的那个。

长度为nnn的排列是由nnn个不同的整数组成的数组,这些整数的顺序从111到nnn。例如,[2,3,1,5,4][2,3,1,5,4][2,3,1,5,4]是一个排列,但[1,2,2][1,2,2][1,2,2]不是排列(222在数组中出现了两次),[1,3,4][1,3,4][1,3,4]也不是排列(n=3n=3n=3,但444在数组中出现)。

分析:

如果枚举出kkk就可以确定那些蘑菇的力量值为000,然后在剩下的蘑菇中贪心的选择最大的kkk个,这样就可以知道选择的蘑菇中的最小魔力值。
用multiset<int>维护两个集合,一个是cntcntcnt表示当前不为000且没有被选到的蘑菇,qqq是当前被选到的最大的kkk个蘑菇。

然后从小到大枚举kkk,每次都从cntcntcnt中取最大值填入到qqq中,直到q.size()==kq.size()==kq.size()==k。然后随着选择数量增大,一些蘑菇魔力变为000,从两个集合中删掉一些蘑菇,每次删除时优先从cntcntcnt中删除即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL inf = 1e18;

void solve() {
    LL n;
    cin >> n;
    multiset<LL> cnt, q;
    vector<LL> a(n + 5);
    vector<LL> p(n + 5);
    for (LL i = 1; i <= n; i++) {
        cin >> a[i];
        q.insert(a[i]);
    }
    for (LL i = 1; i <= n; i++)
        cin >> p[i];
    LL res = -inf;
    LL val = -inf;
    for (LL i = 1; i <= n; i++) {
        while (not q.empty() && cnt.size() < i) {
            LL x = *q.rbegin();
            cnt.insert(x);
            q.erase(q.find(x));
        }
        if (cnt.size() < i)
            break;
        LL v = *cnt.begin() * i;
        if (v > res) {
            res = v;
            val = i;
        }
        if (q.count(a[p[i]]))
            q.erase(q.find(a[p[i]]));
        else
            cnt.erase(cnt.find(a[p[i]]));
    }
    cout << res << " " << val << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

赛后交流

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

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

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling 今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程 阅读详情

相关推荐

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

【Codeforces Round 935 (Div. 3) A~E (Go语言题解)】

题目:组委会计划在游览结束后带领奥林匹克运动会的参赛选手进行徒步旅行。目前,正在计算需要搭乘的帐篷数量。据了解,每个帐篷最多可容纳3人。在参赛选手中,有a名内向型选手,b名外向型选手和c组委会非常尊重每位参赛者的意愿,因此他们希望满足所有参赛者的愿望。请告诉我们至少需要多少顶帐篷,以便所有参加者都能根据自己的喜好找到住处。如果无法满足所有参与者的愿望,则输出−1。题解 :判断3 - b % 3 是否大于c如果大于则不可能安排,其余结果都是可行的最小的即为下面代码所示,时间复杂度O1。

123_wby的博客 2084

SRAM vs RRAM:存算一体芯片选型指南(含最新技术对比)

本文深入对比了SRAM与RRAM在存算一体芯片设计中的核心差异,为硬件工程师和架构师提供实战选型指南。文章从技术本质、性能、功耗、成本及设计风险等多维度剖析,指出SRAM基于成熟CMOS工艺,适合高精度、低延迟场景;而RRAM凭借非易失性和高密度潜力,在超低功耗、固定模型应用中优势明显。决策需综合项目预算、上市时间及技术储备。

e4f5g6h的博客 939

Codeforces Round 963

Codeforces Round 963

青少年趣味编程 696

保姆级教程:手把手配置AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM)

本文提供AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM)的保姆级配置教程,详细讲解从诊断服务基础配置到BswM规则引擎搭建、服务端口映射及EcuM复位执行的完整流程。通过Vector配置工具的实际截图和代码片段,帮助开发者高效实现远程复位功能,并分享调试技巧与性能优化实践。

weixin_30756499的博客 544

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成。

kevin1499的博客 2565

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

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

Mysssone的博客 201

论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)

* 在写HiFi-GAN论文的代码阅读过程中,我发现仅仅通过文字来描述网络结构,不够详细,所以想绘制出网络结构图,更加具象化的描述出网络结构。想去花了,才发现之前都是通过在线绘图网站画的,费时费力,所以想找一些专门的网站化出比较规范并且高质量的图。一方面是为了方便讲解,提高论文的质量,另外一方面也是为了以后写论文打下良好的基础。 * 这篇文章会根据我以前的画图经验展开,以前是使用绘图软件,手动绘图。后来,看到了其他的方法,但是需要写一些代码,或者需要安装特定的软件,投入成本太大,就没有学。所以,本文分享的工

Blackoutdragon的博客 1万+

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

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

wuqingyigexiaoba的博客 309

深度学习驱动的股票波动率预测:LSTM和Transformer模型的实战解析

股票市场的波动率一直是金融领域关注的焦点之一。波动率预测对于风险管理、期权定价和资产配置至关重要。深度学习模型,如长短时记忆网络(LSTM)和Transformer,已经在时间序列数据分析领域取得了显著的成就。本博客将向您展示如何使用这两种深度学习模型来进行股票波动率预测,提供清晰的思路和相应的Python代码,以帮助您理解和应用这一重要任务。

斌擎科技 974

合肥工业大学操作系统实验8

依据操作系统课程所介绍的地址映射与内存共享的原理,本实验的目的是深入理解物理内存的分页管理方式。 深入理解操作系统的段、页式内存管理。包括理解段表、二级页表,以及逻辑地址、线性地址、 物理地址的映射过程。编程实现段、页式内存管理上的内存共享,从而深入理解操作系统的内存管理。从而加深对教材上地址映射与内存共享的理解。

Martin-share的博客 1721

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

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

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3131

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

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

2503_92261635的博客 20

WINCC7.3破解文件

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

2301_81429079的博客 748

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

wuqingyigexiaoba的博客 367

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

牛客周赛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

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值