【蓝桥杯冲刺省一,省一看这些就够了-C++版本】蓝桥杯C++STL及相关练习题

2022年蓝桥杯省赛真题解析(C++B组) 300,寄! 阅读详情

蓝桥杯历年省赛真题

点击链接免费加入题单

STL

map及其函数

map<key,value> 提供一对一的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。map 中的第一个值称为关键字(key),每个关键字只能在 map 中出现一次,第二个称为该关键字的值(value),可以重复。

// 定义,以 string, int 对为例
#include <map>
map<string, int> mp;     // 底层是红黑树,元素可比较大小,key 的结构体要重载 < 运算

// 2- 插入
mp.insert(make_pair("zhs", 18));        // 插入一个键值对,若原先存在该 key,则无法插入和覆盖
mp.insert(pair<string,int>("zhs", 18)); // 插入一个键值对,若原先存在该 key,则无法插入和覆盖
mp["zhs"] = 18;                         // 甚至可以类似数组下标去访问 key 对应的 value,若原先不存在该 key,则创建,若原先存在,则覆盖以前该关键字对应的值
mp.emplace("zhs", 18);                  // 插入效果跟 insert 效果完全一样

// 3- 删除
mp.erase(key);     // 删除值为 key 的元素
mp.erase(iter);    // 删除迭代器 iter 指向的元素,例如 mp.erase(mp.begin());
mp.erase(iter1, iter2); // 删除区间 [iter1, iter2) 的所有元素,例如 mp.erase(mp.begin(), mp.end());
mp.clear();        // 清空集合

// 3- 求大小
int siz = mp.size();         // 求集合大小
bool flag = mp.empty();      // 集合判空

// 4-查询
if(mp.find(key) != mp.end())           // find 函数返回一个指向被查找到元素的迭代器
    cout << mp[key] << endl;
if(mp.count(key))                // count 返回某个值元素的个数
    cout << mp[key] << endl;
auto iter = mp.lower_bound(key);   // 求 key 的下界,返回指向大于等于某值的第一个元素的迭代器
auto iter = mp.upper_bound(key);   // 求 key 的上界,返回大于某个值元素的迭代器

// 5-遍历
map<string, int>::iterator iter;             // 正向遍历
for(iter=mp.begin(); iter!=mp.end(); iter++)
{
    cout << iter->first << " " << iter->second << endl;
    // 或者
    cout << (*iter).first << " " << (*iter).second << endl;
}
map<int>::reverse_iterator riter;    // 反向遍历
for(riter=mp.rbegin(); riter!=mp.rend(); riter++)
{
    // 遍历的同时修改
    iter->second += 10;
    cout << iter->first << " " << iter->second << endl;
}
for (auto x : mp){               // C++ 11 auto 遍历
    cout << x.first << " " << x.second << endl;
}
for (auto& x : mp){               // C++ 11 auto 遍历
    x.second += 10;   // 遍历并修改
    cout << x.first << " " << x.second << endl;
}

// 6- 求最值
map<string, int>::iterator it = mp.begin();    // 最小值
cout << *it << endl;
map<string, int>::iterator it = mp.end();      // 最大值
cout << *(--it) << endl;

/*
1. map 和 set 一样,其中的元素必须支持 < 运算符
2. 在插入时,使用 insert 和 用数组方式去插入,在原先存在要插入的键值时是有区别的,insert不会插入,用数组方式插入则会直接覆盖原先数据
3. map 的迭代器支持 ++、--、==、!=、(*iter).first、 (*iter).second、iter->first、 iter->second 等操作
4. map 的迭代器不支持 +、-、 +=、-= 等算术操作符,也不支持 >、<、>=、<= 等比较操作符
*/

map的插入与遍历
#include<bits/stdc++.h>

using namespace std;

map<string,int> m;

int main(){
    int n,age;
    string s;
    cin >> n;
    for(int i = 1;i <= n;i++){
        cin >> s >> age;
        m[s] = age;
    }
    map<string,int>::iterator it;
    for(it = m.begin();it != m.end();it++){
        cout << it->first<< " "<< it->second<<endl;
    }
}
map的查询
#include<bits/stdc++.h>
using namespace std;
map<string,string> ma;
pair<string,string> p;
int main(){
    int m,n,a;
    string s,t,str;
    set<string,string>::iterator it;
    cin >> n >> m;
    for(int i=1;i<=n;i++){
        cin >> s >> t;
    
        p.first = s;
        p.second = t;
        ma.insert(p);
    } 
    for(int i=1;i<=m;i++){
        cin >> a>> str;
        if(a==1){
            if(ma.find(str)!=ma.end()){
                cout << ma[str];
            }else{
                cout << "NO";
            }
        }
        if(a==2){
            if(str <= (ma.begin()->first))
            {
                cout<<"NO";
            }
            else{
                auto it = ma.lower_bound(str);
                it--;
                cout<< it->second;
            }
        }
        if(a==3){
            if(str >= ((--ma.end())->first))
            {
                cout<<"NO";
            }
            else{
                auto it = ma.upper_bound(str);
                cout<<it->second;
            }
        }
        cout << endl; 
    }
}

set及其函数

set 的含义是集合,它是一个 有序 的容器,里面的元素都是排序好的,支持插入、删除、查找等操作,就像一个集合。所有的操作的都是严格在 O ( l o g n ) O(logn) O(logn) 时间之内完成,效率非常高。 set 和 multiset 的区别是:set插入的元素不能相同,但是 multiset 可以相同。

// 1- 定义
#include <set>
set<int> s;     // 元素必须可比较大小,元素类型必须要支持 < 运算,结构体需要重载 <

// 2- 插入
s.insert(key);    // 插入

// 3- 删除
s.erase(key);     // 删除值为 key 的元素
s.erase(iter);    // 删除迭代器 iter 指向的元素,例如 s.erase(s.begin());
s.erase(iter1, iter2); // 删除区间 [iter1, iter2) 的所有元素,例如 s.erase(s.begin(), s.end());
s.clear();        // 清空集合

// 4- 求大小
int siz = s.size();         // 求集合大小
bool flag = s.empty();      // 集合判空

// 5-查询
if(s.find(key) != s.end())           // find 函数返回一个指向被查找到元素的迭代器
    cout << "exist" << endl;
if(s.count(key) == 1)               // count 返回某个值元素的个数
    cout << "exist" << endl;


set<int>::iterator iter = s.lower_bound(key);   // 求 key 的下界,返回指向大于等于某值的第一个元素的迭代器
set<int>::iterator iter = s.upper_bound(key);   // 求 key 的上界,返回大于某个值元素的迭代器

// auto 类型推断关键字 在NOI 系列比赛中也可以使用了
auto iter = s.lower_bound(key);   // 求 key 的下界,返回指向大于等于某值的第一个元素的迭代器
auto iter = s.upper_bound(key);   // 求 key 的上界,返回大于某个值元素的迭代器

// 6-遍历
set<int>::iterator iter;             // 正向遍历
for(iter=s.begin(); iter!=s.end(); iter++)
{
    cout<<*iter<<endl;
}
set<int>::reverse_iterator riter;    // 反向遍历,不重要
for(riter=s.rbegin(); riter!=s.rend(); riter++)
{
    cout<<*riter<<endl;
}

// 7- 求最值
set<int>::iterator it = s.begin();    // 最小值
cout << *it << endl;
set<int>::iterator it = s.end();      // 最大值
cout << *(--it) << endl;

/*
注意:
1. set 和优先队列一样,其中的元素必须支持 < 运算符
2. set 的迭代器支持 ++、--、==、!=、*iter 等操作
3. set 的迭代器不支持 +、-、 +=、-= 等算术操作符,也不支持 >、<、>=、<= 等比较操作符
*/
set的插入与遍历
#include<bits/stdc++.h>
using namespace std;
int main(){
    set<int> s;//set可以自动去重和排序,默认升序 
    int n,t;
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> t;
        s.insert(t);//set没有push_back操作 
    }
    set<int>::iterator it;//set需要使用迭代器遍历数据 
    for(it=s.begin();it!=s.end();it++){//set支持双向迭代器 
        cout << *it << " ";
    }
}
set的查询
#include<bits/stdc++.h>
using namespace std;
int n, m, c, x;
set<int>a;
set <int, greater<int>> b;
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        int t;
        cin >> t;
        a.insert(t);
        b.insert(t);
    }

    for (int i = 1; i <= m; i++) {
        cin >> c >> x;
        if (c == 1) {
            if (a.find(x) != a.end())cout << x << "\n";
            else cout << "NO\n";
        }
        if (c == 2) {
            set<int>::iterator it;
            it = b.upper_bound(x);//二分查找,找第一个大于x的数的地址
            if (it != b.end()) {
                cout << *it << "\n";
            } else cout << "NO\n";
        }
        if (c == 3) {
            set<int>::iterator it;
            it = a.upper_bound(x);
            if (it != a.end()) {
                cout << *it << "\n";
            } else cout << "NO\n";
        }
    }
}

priority_queue优先队列

因为堆的作用主要是用来获取最大/最小值,类似队列的取最值操作,因此堆有一个别名叫优先队列。在 STL 中提供了"优先队列“的模板,即 priority_queue。关于优先队列具体的应用会在二叉堆与对顶堆中详细讲解。

  • 常见使用
#include <queue>
using namespace std;
// using std::priority_queue;
priority_queue<int> q;    // 定义一个空的优先队列,默认是大根堆

void test()
{
    
    int x = 5;
    q.push(x);       // 将 5 插入堆,这时堆顶是 5
    q.push(3);       // 将 3 插入堆,这时堆顶是 5
    q.push(2*x);     // 将 10 插入堆,这时堆顶是 10
    int k = q.top(); // 取堆顶元素,应该是 10
    q.pop();         // 删除堆顶元素,删除了 10,这时堆顶为 5
    int s = q.size();// 求堆中元素个数,应为 2
    // 清空优先队列的一种方法
    while(!q.empty())
        q.pop();
    // 清空优先队列的第二种方法
    q = priority_queue<int>();
}
  • 实现小根堆
// 大根堆改成小根堆,其中 vector<Type> 为内部存储容器,greater<Type> 为比较方式
priority_queue<Type,vector<Type>,greater<Type>> q; 

// 常为 int 类型
priority_queue<int,vector<int>,greater<int>> q; 

  • 优先队列与结构体重载运算符
// 只能用于大根堆的结构体
struct node{
    int val;
    string info;
    ...
    // 大根堆,重载小于运算符
    bool operator <(const node& other) const {
        return val < other.val;
    }
};
// 定义一个大根堆(默认)
priority_queue<node> q;

// 只能用于小根堆的结构体
struct node{
    int val;
    string info;
    ...
    // 小根堆,重载大于运算符
    bool operator >(const node& other) const {
        return val > other.val;
    }
};
// 定义一个小根堆(默认)
priority_queue<node,vector<node>,greater<node>> q;

pair

将两个变量成对组合打包在一起的数据类型,可以理解为C++内置的保存两个元素(类型可以自定义)的结构体常见的应用就是保存坐标等
pair 支持比较运算符。其比较规则是:先比较第一个元素,如果第一个元素值相等,再比较第二个元素。

pair<int,int> pos;
pos.first = 1;
pos.second = 1; 
a = make_pair(1,1);
a = pair<int,int>(1,1);

vector及其函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vector插入
#include<bits/stdc++.h>
using namespace std;
int a[15];
int main(){
    int n,x,y;
    cin >> n ;
    for(int i=1;i<=n;i++){
        cin >> a[i];
    }
    cin >> x >> y;
    vector<int> v(a+1,a+n+1);
    v.insert(v.begin()+x-1,y);
    for(int i=0;i<v.size();i++){
        cout << v[i] << endl;
    }
}
vector遍历
#include<bits/stdc++.h>
using namespace std;
vector<int> a[100100];
int n,m,i,j,x,y; 
int main(){
    cin >> n>> m;
    for(i=1;i<=m;i++){
        cin>> x>> y;
        a[x-1].push_back(y);//这里使用a[x]也是可以的
    }
    for(i=0;i<n;i++){
        cout << a[i].size();
        sort(a[i].begin(),a[i].end());//对每一个向量排序
        for(j=0;j<a[i].size();j++){
            cout << " "<<a[i][j];
        } 
        cout<< endl;
    }
    return 0;
}
vector排序
#include<bits/stdc++.h>
using namespace std;
vector<int> a[1005];//定义向量数组
int main(){
    int n,c,x;
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> c;
        for(int j=1;j<=c;j++){
            cin>> x;
            a[i].push_back(x);
        }
        sort(a[i].begin(),a[i].end());
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++){
        for(int j=0;j<a[i].size();j++){
            cout << a[i][j]<< " ";
        }
        cout << endl;
    } 
}
如何高效备考蓝桥杯(c/c++)组 按照此计划,每天投入3-4小时高效练习,2个月内可显著提升竞赛能力。坚持“真题为主+模板为辅”,蓝桥杯省赛稳中求胜! 阅读详情

相关推荐

【蓝桥杯C/C++】代码性能提升技巧:算法选择

在竞赛中,算法的选择不仅决定了解题的正确性,还决定了程序的执行效率和资源使用情况。通过掌握贪心、分治、动态规划、双指针与滑动窗口、位运算、预处理等算法的特点、适用场景及优化技巧,我们可以在竞赛的严苛限制下写出更高效、更可靠的代码。 2024.11.20-✍

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 1797

备战蓝桥杯——C++基础算法(一)

蓝桥杯,算法基础

m0_70640261的博客 5108

蓝桥杯备赛指南

背景 可能是因为新的一年蓝桥杯报名开始了,所以最近有很多小伙伴私聊我,问该如何训练,训练到什么地步可以拿奖,所以我想再补充一些关于具体训练内容的东西来帮助大家训练.我也是第二次参加蓝桥杯了,第一次也是拿到了国家二等奖(B组),对这部分内容有兴趣的同学也可以去看看我之前写的一篇博客. 考点 既然要参加蓝桥杯那对它的考试内容当然要相当了解了.这一部分可以在蓝桥杯官网查看我这里也会为大家进行一个总结.其实蓝桥杯作为算法竞赛考点与ACM差不多,主要包括但不限于以下两个部分 1.计算机算法:枚举、排序、搜索、计数、贪

TGX的博客 2万+

蓝桥杯C/C++实用知识总结

在Excel表格的B列填分母,每行是前一行的两倍,在B2单元格填写“=B1*2”,然后将鼠标指针移动到B2单元格的右下角,当指针变成十字形状时,按住鼠标左键向下拖拽到第20行,就填好了分母。返回值:如果没有下一个排列组合,则返回false,否则返回true,每执行一次,新的排列放回到原来的空间(例如原来的字符串s会变成新的字符排列顺序)中。两个矩阵A和B相乘,要求A的列数等于B的行数,设A是m×n的矩阵,B是n×u的矩阵,那么乘积C=AB是m×u的矩阵,三重循环,复杂度为O(mnu)。

m0_61443432的博客 2万+

蓝桥杯冲刺:从真题剖析到实战策略,突破算法竞赛瓶颈

算法竞赛是检验编程能力与计算思维的重要平台,其核心在于对数据结构与算法的深入理解和灵活应用。从原理层面看,参赛者需要掌握从基础枚举、排序到动态规划、图论等经典模型,理解其时间复杂度和适用场景。这些技术的价值在于能够高效解决复杂的计算问题,提升软件性能和解决实际工程挑战。在应用场景上,无论是蓝桥杯等竞赛,还是互联网公司的技术面试,扎实的算法功底都是关键竞争力。本文聚焦于【蓝桥杯冲刺】与【真题剖析】,探讨如何通过系统性的真题训练,精准定位知识薄弱点,并制定有效的临场策略,从而在有限时间内实现能力突破和成绩跃升。

weixin_30378623的博客 518

蓝桥杯备赛指南:从零到省一的系统性算法竞赛规划

算法竞赛是检验编程能力与计算机科学基础的重要途径,其核心在于对经典数据结构与算法的深刻理解和灵活应用。动态规划、深度优先搜索等核心算法思想,不仅是解决复杂问题的关键工具,更是提升逻辑思维与问题建模能力的基石。掌握这些技术,对于备战如蓝桥杯等主流赛事、夯实编程基础、乃至未来的软件开发与求职都极具价值。本文基于大量实战经验,系统梳理了从语言基础、算法模板到真题驱动的四阶段备赛方案,并融入社群协作与高效调试等热词,为参赛者提供一套可执行、可复制的提升路径,帮助普通选手科学规划,实现从入门到获奖的跨越。

weixin_34080571的博客 422

利用DeepSeek备战蓝桥杯,冲刺20天

2023年省赛模拟题(如乘积方案数、最大连通块)第七届省赛真题(如煤球数目、生日蜡烛)建议:使用蓝桥杯官方练习系统或AcWing蓝桥杯专题。

m0_73587261的博客 1839

【蓝桥杯】从零备战:C++组与Python组的策略对比与选择指南

本文详细对比了蓝桥杯C++组与Python组的备赛策略,帮助参赛者根据编程基础和目标选择合适组别。C++组竞争激烈但含金量高,适合算法高手;Python组上手快、代码量少,适合快速解题。文章还提供了从零开始的备战路线、算法进阶训练法及应对OI赛制的技巧,助力参赛者高效备赛。

weixin_28049429的博客 432

魂断蓝桥|第十五届蓝桥杯江苏省软件类C++大学生A组省级三等奖备赛经验分享

蓝桥杯感悟

weixin_53472920的博客 2114

蓝桥杯C/C++ B组备战指南:从算法基础到实战策略

算法与数据结构是计算机科学的核心基础,它们通过特定的逻辑组织和存储方式,高效解决各类计算问题。其原理在于设计时间与空间复杂度平衡的解决方案,以应对大规模数据处理需求。掌握基础算法如排序、查找、递归、动态规划等,对于提升编程效率和解决复杂工程问题具有重要技术价值,广泛应用于软件开发、人工智能、数据分析等领域。本文聚焦蓝桥杯竞赛,针对C/C++ B组选手,提供一套覆盖环境搭建、核心算法(如DFS、DP)、真题演练及考场策略的系统备战方案,帮助参赛者高效备赛,提升算法实战能力。

weixin_33508411的博客 300

蓝桥杯C++备赛指南:从STL应用到DP实战的考点精讲

在算法竞赛和编程学习中,数据结构与算法是构建高效解决方案的核心基石。其原理在于通过合理组织数据与设计计算步骤,以最优时空复杂度解决问题。掌握经典数据结构(如向量、映射、栈、队列)和算法思想(如动态规划、搜索、贪心)的技术价值在于,能显著提升代码效率与问题解决能力,是应对技术面试和开发复杂系统的关键。这些知识广泛应用于搜索引擎、推荐系统、路径规划等场景。本文聚焦蓝桥杯竞赛,深入剖析C++中STL容器的实战应用与动态规划等高频考点的解题框架,帮助学习者将知识点转化为解决真题的武器,实现从理论学习到竞赛实战的有效

weixin_34189116的博客 403

蓝桥杯国赛C++ B组真题深度解析:从STL到动态规划的实战进阶

算法竞赛是检验编程与问题解决能力的重要途径,其核心在于将复杂问题抽象为可计算模型,并运用高效的数据结构与算法进行求解。理解算法原理,如动态规划的状态转移、二分答案的单调性判定,是构建解题框架的基础。这些技术的价值在于能大幅提升程序效率,处理大规模数据,在资源调度、路径规划等实际工程场景中广泛应用。本文以2023年蓝桥杯国赛C/C++ B组真题为切入点,结合STL容器的选择艺术与时空复杂度估算,深入剖析了动态规划、二分答案及图论建模等高频考点,为参赛者提供从基础概念到实战优化的系统性复盘。

weixin_33894640的博客 366

蓝桥杯C++竞赛:从算法基础到实战策略的完整备赛指南

算法竞赛是检验编程能力与逻辑思维的重要场景,其核心在于将复杂问题抽象为可计算模型,并通过高效算法求解。从基础的数据结构(如栈、队列、树)到经典算法思想(如分治、贪心、动态规划),理解其原理是构建解题能力的基础。这些技术不仅提升计算效率,更培养了系统化的问题拆解与优化思维,在软件开发、数据分析、人工智能等领域均有广泛应用。针对蓝桥杯C++ AB组这类综合性竞赛,备赛需系统覆盖搜索算法、动态规划等高频考点,并结合真题进行模块化训练。本文聚焦DFS/BFS的剪枝优化、背包问题的状态转移等核心实战技巧,帮助参赛者构

weixin_30268921的博客 420

蓝桥杯国赛深度复盘:从算法思维到C++实战的解题策略

算法竞赛是检验编程与问题解决能力的重要途径,其核心在于将实际问题抽象为计算模型,并运用高效算法求解。理解动态规划、深度优先搜索(DFS)、广度优先搜索(BFS)等基础算法的原理,是提升解题能力的关键。这些技术能有效优化程序性能,在处理状态搜索、路径规划及组合计数等场景中具有极高价值。本文以经典赛事题目为例,深入剖析如何将算法思维转化为稳健的C++代码,涵盖日期处理、带状态BFS及完全背包等典型问题,帮助读者掌握从问题分析到代码实现的完整链路,提升在算法竞赛及工程实践中的实战能力。

weixin_29193359的博客 291

蓝桥杯C/C++组3-6个月高效备考路线:从语法到算法的实战指南

数据结构与算法是计算机科学的核心基础,其原理在于通过特定的数据组织和操作逻辑,高效解决各类计算问题。掌握经典算法如排序、查找、动态规划和图论算法,能显著提升程序的时间与空间效率,具有极高的技术价值。在编程竞赛、软件开发和系统优化等场景中,扎实的算法功底是解决复杂问题的关键。本文聚焦蓝桥杯C/C++组备赛,提供一条融合语法筑基与算法突破的系统化路径,重点涵盖动态规划、图论等高频考点,并强调通过真题实战和构建个人代码模板库来沉淀核心解题能力,帮助学习者在有限时间内构建起应对竞赛所需的知识体系和实战技能。

weixin_34199335的博客 450

datart 二开环境搭建

下载源码, 地址: https://github.com/running-elephant/datart, dev 分支; 解压后使用 idea 打开; 服务端: 3.1 安装依赖, idea会自动安装; 3.2 修改配置文件 /config/application.yml 3.3 创建数据库,并将bin/datart.sql导入到数据库中 3.4 入口: /server/src/main/java/datart/DatartServerApplication.java [外链图片转存失败,源站可能有防.

又是再见? 6133

蓝桥杯C++备赛:从输入输出优化到DP与数论实战技巧

在算法竞赛中,C++因其高效的执行性能和对底层资源的精细控制而成为首选语言。其核心原理在于通过编译器优化和标准模板库(STL)提供丰富的数据结构与算法,从而在时间与空间复杂度上实现极致平衡。掌握C++在竞赛中的高效应用,能显著提升解题速度与代码可靠性,尤其适用于**蓝桥杯**这类注重算法实现与效率的赛事。具体技术价值体现在输入输出加速、STL容器预分配、动态规划(DP)状态优化以及数论工具(如快速幂、素数筛)的灵活运用上。这些技巧广泛应用于解决大规模数据处理、状态转移建模和数学计算等**算法竞赛**典型场景

weixin_34059951的博客 331

手把手教你用ROS和Gazebo搭建Unitree A1机器狗仿真环境(含URDF/Xacro详解)

本文详细介绍了如何使用ROS和Gazebo搭建Unitree A1机器狗的仿真环境,涵盖URDF/Xacro文件编写、Gazebo物理引擎集成及ROS控制实现。通过实战指南,帮助开发者掌握四足机器人仿真技术,提升开发效率。

bush的博客 278

从零基础到蓝桥杯竞赛:规划与成长之路

每一个参加竞赛的初心,或许都来自对成长的渴望。对于我而言,报名蓝桥杯C++组,不仅是为了追求成绩,更是一次从零出发、重塑自我学习能力的挑战。 在这篇博客中,我想记录自己的规划和思考,把零基础的现状一步步变成可执行的任务体系,形成一个可以持续优化的成长路径。这不仅是对自己的复盘,也希望能够帮助和我一样刚起步的朋友。

2403_86977424的博客 714

脑机接口(BCI)从原理到开发实战 09|SSVEP应用:通过视觉刺激控制设备

本文介绍了稳态视觉诱发电位(SSVEP)脑机接口技术。SSVEP是一种高效的非侵入式BCI范式,当用户注视特定频率闪烁的视觉刺激时,大脑枕叶会产生对应的节律性响应。文章详细阐述了SSVEP的神经机制、刺激范式设计、数据预处理方法,重点讲解了典型相关分析(CCA)这一核心识别算法。相比运动想象和P300范式,SSVEP具有信息传输率高(60-100 bits/min)、信号稳定、无需训练等优势,在高速拼写、设备控制等领域应用广泛。文章还提供了完整的电极选择、滤波、分段等预处理流程,以及CCA和滤波器组CCA的

小明的博客 1351

从零搭建 AI 运维 Agent:告警自动诊断 + 修复的完整技术方案

适合读者:管理 5-50 台服务器的运维/SRE 工程师、技术负责人 技术栈:FastAPI + React + PostgreSQL + Redis + DeepSeek 关键词:AI运维、AIOps、自动化运维、智能告警、告警修复、Runbook自动化、DevOps、SRE、DeepSeek运维

weixin_38359457的博客 1640

蓝桥杯国赛C++B组算法复盘:动态规划、搜索与工程实现避坑指南

动态规划(DP)和深度优先搜索(DFS)是算法竞赛与工程开发中的核心基础技术。动态规划通过将复杂问题分解为重叠子问题并存储中间结果,避免了重复计算,其关键在于状态定义与转移方程的构建,常用于求解最优化问题。深度优先搜索则通过递归或栈系统地探索所有可能路径,是解决组合、排列和路径查找问题的有力工具,其效率高度依赖于剪枝优化。掌握这两项技术,对于提升计算思维、优化程序性能具有重要价值,尤其在处理如蓝桥杯国赛等竞赛中的经典赛题时,能有效解决涉及最优解搜索、状态空间遍历等高频考点。本文以第九届蓝桥杯国赛C++B组题

weixin_34117211的博客 518

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+
上一篇: 【888题秋招篇】剑指大厂offer第十二题,带你用数学思维秒杀米哈游校招真题-棋盘,斩获大厂年薪60wOffer
下一篇: 【888题竞赛篇】第六题,2023ICPC济南-来自知识的礼物(Gifts from Knowledge)
Dashcoding编程设
博客等级 码龄2年 566粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值