CCF-CSP 第23次认证考试 202109-3脉冲神经网络(模拟)(100分)

CSP-J初赛模拟试题及答案 (1)判断题16. 输入的n等于1001时,程序不会发生下标越界。(X)17. 输入的a[i]必须全为正整数,否则程序将陷入死循环。(X)18. 当输入”5 2 11 9 16 10”时,输出为”3 4 3 17 5”。(X)19. 当输入为”1 511998“时,输出为”18”。(√)20. 将源代码中g函数的定义(13-16行)移到main函数的后面,程序可以正常编译运行。(X)单选题21. 当输入为”2 -65536 2147483647”时,输出为(B)。(2)判断题。 阅读详情

问题描述

试题编号:202109-3
试题名称:脉冲神经网络
时间限制:1.0s
内存限制:512.0MB
问题描述:

题目背景

在本题中,你需要实现一个 SNN(spiking neural network,脉冲神经网络)的模拟器。一个 SNN 由以下几部分组成:

  1. 神经元:按照一定的公式更新内部状态,接受脉冲并可以发放脉冲
  2. 脉冲源:在特定的时间发放脉冲
  3. 突触:连接神经元-神经元或者脉冲源-神经元,负责传递脉冲

题目描述

神经元会按照一定的规则更新自己的内部状态。本题中,我们对时间进行离散化处理,即设置一个时间间隔 Δt,仅考虑时间间隔整数倍的时刻 t=kΔt(k∈Z+),按照下面的公式,从 k−1 时刻的取值计算 k 时刻的变量的取值:

vk=vk−1+Δt(0.04vk−12+5vk−1+140−uk−1)+Ik

uk=uk−1+Δta(bvk−1−uk−1)

其中 v 和 u 是神经元内部的变量,会随着时间而变化,a 和 b 是常量,不会随着时间变化;其中 Ik 表示该神经元在 k 时刻接受到的所有脉冲输入的强度之和,如果没有接受到脉冲,那么 Ik=0。当进行上面的计算后,如果满足 vk≥30,神经元会发放一个脉冲,脉冲经过突触传播到其他神经元;同时,vk 设为 c 并且 uk 设为 uk+d,其中 c 和 d 也是常量。图 1 展示了一个神经元 v 变量随时间变化的曲线。

 
图1: 神经元 v 变量随时间变化的曲线

突触表示的是神经元-神经元、脉冲源-神经元的连接关系,包含一个入结点和一个出结点(可能出现自环和重边)。当突触的入结点(神经元或者脉冲源)在 k 时刻发放一个脉冲,那么在传播延迟 D(D>0) 个时刻以后,也就是在 k+D 时刻突触的出结点(神经元)会接受到一个强度为 w 的脉冲。

脉冲源在每个时刻以一定的概率发放一个脉冲,为了模拟这个过程,每个脉冲源有一个参数 0<r≤32,767,并统一采用以下的伪随机函数:

C++ 版本:

static unsigned long next = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

C++

Python 版本:

next = 1
def myrand():
    global next
    next = (next * 1103515245 + 12345) % (2 ** 64)
    return (next // 65536) % 32768

Python

Java 版本:

long next = 1;
int myrand() {
    next = next * 1103515245 + 12345;
    return (int)((Long.divideUnsigned(next, 65536)) % 32768);
}

Java

在每个时间刻,按照编号顺序从小到大,每个脉冲源调用一次上述的伪随机函数,当 r>myrand() 时,在当前时间刻发放一次脉冲,并通过突触传播到神经元。

进行仿真的时候,已知 0 时间刻各个神经元的状态,从 1 时间刻开始按照上述规则进行计算,直到完成 T 时刻的计算,再输出 T 时刻神经元的 v 值和发放的脉冲次数分别的最小值和最大值。

规定输入数据中结点按如下方式顺序编号:[0,N−1] 为神经元的编号,[N,N+P−1] 为脉冲源的编号。

代码中请使用双精度浮点类型。

输入格式

从标准输入读入数据。

输入的第一行包括四个以空格分隔的正整数 N S P T,表示一共有 N 个神经元,S 个突触和 P 个脉冲源,输出时间刻 T 时神经元的 v 值。

输入的第二行是一个正实数 Δt,表示时间间隔。

输入接下来的若干行,每行有以空格分隔的一个正整数 RN 和六个实数 v u a b c d,按顺序每一行对应 RN 个具有相同初始状态和常量的神经元:其中 v u 表示神经元在时刻 0 时的变量取值;a b c d 为该神经元微分方程里的四个常量。保证所有的 RN加起来等于 N。它们从前向后按编号顺序描述神经元,每行对应一段连续编号的神经元的信息。

输入接下来的 P 行,每行是一个正整数 r,按顺序每一行对应一个脉冲源的 r 参数。

输入接下来的 S 行,每行有以空格分隔的两个整数 s(0≤s<N+P)、t(0≤t<N) 、一个实数 w(w≥0) 和一个正整数 D,其中 s 和 t 分别是入结点和出结点的编号;w 和 D 分别表示脉冲强度和传播延迟。

输出格式

输出到标准输出。

输出共有两行,第一行由两个近似保留 3 位小数的实数组成,分别是所有神经元在时刻 T 时变量 v 的取值的最小值和最大值。第二行由两个整数组成,分别是所有神经元在整个模拟过程中发放脉冲次数的最小值和最大值。

只要按照题目要求正确实现就能通过,不会因为计算精度的问题而得到错误答案。

样例1输入

1 1 1 10
0.1
1 -70.0 -14.0 0.02 0.2 -65.0 2.0
30000
1 0 30.0 2

Data

样例1输出

-35.608 -35.608
2 2

Data

样例1解释

该样例有 1 个神经元、1 个突触和 1 个脉冲源,时间间隔 Δt=0.1。唯一的脉冲源通过脉冲强度为 30.0、传播延迟为 2 的突触传播到唯一的神经元。

该样例一共进行 10 个时间步的模拟,随机数生成器生成 10 次随机数如下:

16838
5758
10113
17515
31051
5627
23010
7419
16212
4086

None

因此唯一的脉冲源在时刻 1-4 和 6-10 发放脉冲。在时间刻从 1 到 10 时,唯一的神经元的 v 取值分别为:

-70.000
-70.000
-40.000
-8.200
-65.000
-35.404
-32.895
0.181
-65.000
-35.608

None

该神经元在时刻 5 和时刻 9 发放,最终得到的 v=−35.608 。

样例2输入

2 4 2 10
0.1
1 -70.0 -14.0 0.02 0.2 -65.0 2.0
1 -69.0 -13.0 0.04 0.1 -60.0 1.0
30000
20000
2 0 15.0 1
3 1 20.0 1
1 0 10.0 2
0 1 40.0 3

Data

样例2输出

-60.000 -22.092
1 2

Data

子任务

子任务TNSPD分值
1≤102≤102≤102≤102≤10230
2≤103≤103≤103≤103≤10340
3≤105≤103≤103≤103≤1030

/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<list>
#include<set>
#include<iomanip>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<cassert>
#include<sstream>
#include<algorithm>
using namespace std;
typedef long long  ll;
#define ull unsigned long long
#define scf(n) scanf("%d",&n)
#define scfl(n) scanf("%lld",&n)
#define prf(n) printf("%d",n)
#define prfl(n) printf("%lld",n)
#define scfd(n) scanf("%lf",&n)
#define prfd(n) printf("%.lf",n)
#define prf10(n) printf("%.10f",n)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r)/2
#define mms(x, y) memset(x, y, sizeof x)
#define over(i,s,t) for(register long long i=s;i<=t;++i)
#define lver(i,t,s) for(register long long i=t;i>=s;--i)
const int INF = 0x3f3f3f3f;
const double EPS=1e-10;
const double Pi=3.1415926535897;
inline double max(double a,double b){
    return a>b?a:b;
}
inline double min(double a,double b){
    return a<b?a:b;
}
inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
int xd[8] = {0, 1, 0, -1, 1, 1, -1, -1};
int yd[8] = {1, 0, -1, 0, -1, 1, -1, 1};
 
//fastPow
int fastPow(int x,int n){
    if(n==1) return x;
    int tmp=fastPow(x,n/2); //fenzi
    if(n%2==1) return tmp*tmp*x;
    else return tmp*tmp;
}
ll gcd(ll m, ll n){return n == 0 ? m : gcd(n, m%n);}
ll lcm(ll m, ll n){return m*n / gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}
 
ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}


//dijsktra
//start
//const int MAX= 10020;
//struct node {
//    int x,to,next,w;
//    bool operator <(const node &a) const{
//        return this->w>a.w;
//    }
//}G[MAX<<1];
//int cnt;
//int dis[MAX];
//int vis[MAX];
//int head[MAX];
//
//
//int m,n;
//int b[10020];
//
//
//void add(int u,int v,int w){
//    G[++cnt].to=v;
//    G[cnt].w=w;
//    G[cnt].next=head[u];
//    head[u]=cnt;
//}
//int  dijkstra(int s){
//    mms(dis,INF);
//    dis[s]=0;
//    priority_queue<node> p;
//    node t;
//    t.x=s;
//    t.w=0;
//    p.push(t);
//    while (!p.empty()) {
//        node u=p.top();
//        p.pop();
//        int v=u.x;
//        if(dis[v]!=u.w) continue;
//        for(int i=head[v];i;i=G[i].next){
//            int to=G[i].to;
//            if(dis[to]>dis[v]+G[i].w){
//                dis[to]=dis[v]+G[i].w;
//                t.x=to;
//                t.w=dis[to];
//                p.push(t);
//            }
//
//        }
//    }
//    int m1=-1;
//        int m2=-1;
//        dis[s]=-3;
//        for(int i=1;i<=n;i++){
//            if(dis[i]==INF) continue;
//            if(dis[i]>m1){
//                m2=m1;
//                m1=dis[i];
//            }
//            else if(dis[i]>m2){
//                m2=dis[i];
//            }
//        }
//        if(m1!=-1&&m2!=-1) return m1+m2;
//        return -1;
//
//}
//
//
//int main(){
//    int t;
//    cin>>t;
//    while (t--) {
//        cin>>n>>m;
//        int u,v,w;
//
//        for(int i=1;i<=m;i++){
//            cin>>u>>v>>w;
//            add(u,v,w);
//            add(v,u,w);
//        }
//        int ans=0;
//        int cnt=0;
//        for(int i=1;i<=n;i++){
//            ans=max(ans,dijkstra(i));
//        }
//        cout<<ans<<endl;
//    }
//}
//end


//e_cheak
//int vis[1000010];
//int prime[100010];
//int  e_cheak(int n){   //k为2-n素数的个数
//    for(int i=0;i<=n;i++){
//        vis[i]=0;
//    }
//    for(int i=2;i*i<=n;i++){
//        if(!vis[i]){
//            for(int j=i*i;j<=n;j+=i){
//                vis[j]=1;
//            }
//        }
//    }
//    int k=0;
//    for(int i=2;i<=n;i++){
//        if(!vis[i])
//            prime[k++]=i; //统计素数
//    }
//    return k;
//}
//
////进制转化 x转化为y进制
//string work(int x,int y){
//    string str="";
//    while(x){
//        if(x%y>=10) str+=x%y+'A'-10;
//        else str+=x%y+'0';
//        x/=y;
//    }
//    reverse(str.begin(),str.end());
//    return str;
//}
//
//
//const int MAX=1000005;
//char str[MAX];
//char pattern[MAX];
//int cnt;
//int Next[MAX];
//void  getnext(string p,int plen){
//    Next[0]=0;
//    Next[1]=0;
//    for(int i=1;i<plen;i++){
//        int j=Next[i];
//        while (j&&p[i]!=p[j]) {
//            j=Next[j];
//        }
//        Next[i+1]=(p[i]==p[j])?j+1:0;
//    }
//}
//int kmp(string s,string p){
//    int last=-1;
//    int slen=s.length();
//    int plen=p.length();
//    getnext(p,plen);
//    int j=0;
//    for(int i=0;i<slen;i++){
//        while (j&&s[i]!=p[j]) {
//            j=Next[j];
//        }
//        if(s[i]==p[j]) j++;
//        if(j==plen){
//            //start
//            return 1;
//            //end
//        }
//    }
//    return 0;
//}
//int main(){
//    int n;
//    cin>>n;
//    string t;
//    string s="";
//    for(int i=2;i<=16;i++){
//        s="";
//        s+=work(n,i);
//        if(kmp(s,t))
//        {
//            cout<<"yes";
//            return 0;
//        }
//    }
//    cout<<"no"<<endl;
//    return 0;
//}


//string s1,s2;
//int main(){
//    cin>>s1;
//    s2="cocacola";
//    int ans;
//    for(int i=0;i<s1.length();i++){
//        if(s1[i]!=s2[i])
//            ans++;
//    }
//    cout<<ceil(ans/2);
//}


//const int MAX=10010;
//
//int n;
//int a[MAX];
//int st[MAX],ed[MAX];
//int pos[MAX];
//int sum[MAX];
//int add[MAX];
////区间修改
//void change(int l,int r,int d){
//    int p=pos[l];
//    int q=pos[r];
//    if(p==q){ //情况1 区间位于一个块里面
//        for(int i=l;i<=r;i++){
//            a[i]+=d;
//        }
//        sum[p]+=d*(r-l+1);
//    }
//    else { //区间跨多个块
//        for(int i=p+1;i<=q-1;i++){
//            add[i]+=d; //完整的块里面的数据直接加上d
//        }
//        for(int i=l;i<=ed[p];i++){ //整块前面的散块
//            a[i]+=d;
//        }
//        sum[p]+=d*(ed[p]-l+1);
//        for(int i=st[q];i<=r;i++){ //整块后面的散块
//            a[i]+=d;
//        }
//        sum[q]+=d*(r-st[q]+1);
//    }
//}
//
//ll query(int l,int r){
//    int p=pos[l];
//    int q=pos[r];
//    ll ans=0;
//    if(p==q){ //整块
//        for(int i=l;i<=r;i++){
//            ans+=a[i];
//        }
//        ans+=add[p]*(r-l+1);
//    }
//    else { //有散块
//        for(int i=p+1;i<=q-1;i++){
//            ans+=sum[i]+add[i]*(ed[i]-st[i]+1); //先处理整块
//        }
//        for(int i=l;i<=ed[p];i++){ //整合散块
//            ans+=a[i];
//        }
//        ans+=add[p]*(ed[p]-l+1);
//        for(int i=st[q];i<=r;i++){
//            ans+=a[i];
//        }
//        ans+=add[q]*(r-st[q]+1);
//    }
//    return ans;
//}
//
//int main(){
//
//
//    cin>>n;
//    for(int i=1;i<=n;i++){
//        cin>>a[i];
//    }
//    //start
//    int block=sqrt(n);
//    int t=n/block;
//    if(n%block) t++;
//    for(int i=1;i<=t;i++){
//        st[i]=(i-1)*block+1;
//        ed[i]=i*block;
//    }
//    ed[t]=n;
//    for(int i=1;i<=n;i++){
//        pos[i]=(i-1)/block+1; //pos是第i个元素所在的块
//    }
//
//
//    for(int i=1;i<=t;i++){
//        for(int j=st[i];j<=ed[i];j++){
//            sum[i]+=a[j];  //sum是第i块的区间和
//        }
//    }
//    //end
//
//    int opt,l,r,c;
//    for(int i=1;i<=n;i++){
//        cin>>opt>>l>>r>>c;
//        if(opt==1){
//            cout<<query(r,r)<<endl;
//        }
//        else {
//            change(l,r,c);
//        }
//    }
//}
//


const int MAX=1e3+5;
int N,S,P,T;
double dt;
double u,v,a,b,c,d;
int rn,rns;
int maxd;
double maxv=-INF,minv=INF;
int maxtime=-INF,mintime=INF;
int r[MAX];
vector<int>G[MAX<<1]; //用vector容器存放节点连接情况
struct ce{
    double u,v,a,b,c,d;
    int time; //神经元发射脉冲的次数
}ces[MAX];
struct mc{
    int s,t;
    double w;
    int D;
}mcs[MAX];


//
static unsigned long next1 = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next1 = next1 * 1103515245 + 12345;
    return((unsigned)(next1/65536) % 32768);
}
//


int main(){
    rns=0;
    cin>>N>>S>>P>>T;
    cin>>dt;
    while (rns<N) {
        cin>>rn>>v>>u>>a>>b>>c>>d;
//        over(i,rns,rns+rn-1)
        //更新的是每段时间的神经元信息
        for(int i=rns;i<rns+rn;i++)
        {
            ces[i].v=v;
            ces[i].u=u;
            ces[i].a=a;
            ces[i].b=b;
            ces[i].c=c;
            ces[i].d=d;
            ces[i].time=0;
        }
        rns+=rn; //为了满足rn之和=rns
    }
//    over(i,0,P-1)
    for(int i=0;i<P;i++)
        cin>>r[i];
//    over(i,0,S-1)
    for(int i=0;i<S;i++)
    {
        cin>>mcs[i].s>>mcs[i].t>>mcs[i].w>>mcs[i].D;
        maxd=max(maxd,mcs[i].D);
        G[mcs[i].s].push_back(i);//存放节点连接情况
    }
    int mod=maxd+1;
    vector<vector<double>> I(mod,vector<double>(N));
//    over(k,0,T-1)
    for(int k=0;k<T;k++)
    {
        //Ik表示每时刻受到的脉冲之和 所以每次都要清零
//        over(i,0,N-1)
        for(int i=0;i<N;i++)
            I[(k+maxd)%mod][i]=0;
        
        
        //脉冲过程的模拟
//        over(i,0,P-1)
        for(int i=0;i<P;i++)
        {
            int my=myrand();
            if(r[i]>my){
//                over(j,0,G[N+i].size()-1)
                for(int j=0;j<G[N+i].size();j++) //传向连接的所有神经元
                {
                    mc m=mcs[G[N+i][j]];
                    I[(k+m.D)%mod][m.t]+=m.w;
                }
            }
        }
        
        //
//        over(i,0,N-1)
        for(int i=0;i<N;i++)
        {
            double v1=ces[i].v;
            double u1=ces[i].u;
            double a1=ces[i].a;
            double b1=ces[i].b;
            ces[i].v=v1+dt*(0.04*v1*v1+5*v1+140-u1)+I[k%mod][i];
            ces[i].u=u1+dt*a1*(b1*v1-u1);
            if(ces[i].v>=30){
                ces[i].time++;
                for(int j=0;j<G[i].size();j++)
//                over(j,0,G[i].size()-1)
                {
                    mc m=mcs[G[i][j]];
                    I[(k+m.D)%mod][m.t]+=m.w;
                }
                ces[i].v=ces[i].c;
                ces[i].u+=ces[i].d;
            }
        }
        
    }
//    over(i,0,N-1)
    for(int i=0;i<N;i++)
    {
        maxv=max(maxv,ces[i].v);
        minv=min(minv,ces[i].v);
        maxtime=max(maxtime,ces[i].time);
        mintime=min(mintime,ces[i].time);
    }
    cout<<fixed<<setprecision(3)<<minv<<" "<<maxv<<endl;
    cout<<mintime<<" "<<maxtime<<endl;
    return 0;
}

CSP-CCF认证考试(第一次)总结,题解 题目整体难度不大,前四题还好写,第五题hard难度的dp,思路确实想不到,写了三个小时,第三题模拟题不知道stringstream,写得很吃力,最后放弃了3,5题,得分300。有点菜继续加油。(一,二题简单无思路,三,五题代码参考自acwing)相反数有 N𝑁 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 −a 为一对相反数)。 阅读详情

相关推荐

激光雷达+相机标定避坑指南:手把手教你用KITTI数据完成坐标转换

本文详细介绍了激光雷达与相机标定的实战指南,利用KITTI数据集完成精准坐标转换。从数据准备、工具链搭建到标定矩阵加载与验证,再到坐标转换流水线的工程实现,提供了全面的避坑技巧和工程实践建议。特别强调了多传感器融合中的常见问题及解决方案,帮助开发者提升自动驾驶和机器人感知系统的环境感知精度。

book8的博客 835

CSP 202109-3 脉冲神经网络(详解)

本文主要讲解题思路,了解题目大意,不着重讲算法,纯暴力模拟,无代码优化。

weixin_51275821的博客 5179

游戏数据训练世界模型:AI物理规律学习与仿真应用实践

世界模型作为理解现实世界动态的AI工具,通过多模态数据学习物理和空间属性来预测未来状态。其核心原理在于从环境交互中提取物理规律,技术价值体现在能够安全、低成本地训练AI系统应对复杂场景。在应用层面,游戏数据因其结构化环境和内置物理引擎,成为世界模型训练的优质素材。游戏世界中的物体交互、运动轨迹等数据天然包含现实物理规律,特别适合训练物理AI。本文以General Intuition公司获得3.2亿美元融资为切入点,深入探讨游戏数据在世界模型训练中的技术实现路径,涵盖数据提取管道构建、多模态数据融合方法,以及

weixin_29056865的博客 367

CSP CCF: 202109-3 脉冲神经网络 (C++) 66分

题目来源 计算机软件能力认证考试系统 解题思路 由于我有些看不懂这个题目,所以我是先找的他人的博客理解了一下题目。 这个博客写得很详细的(66分),有助于理解题目。CSP 202109-3 脉冲神经网络(详解)_刘学.的博客-优快云博客 所以我这里主要就是记录一下这道题啦,想到如何优化到100分,再更新。 代码 66分 #include <iostream> #include <iomanip> using namespace std; ...

qq_45936312的博客 2130

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

unity中判断是否联网,判断网络状态的两种方式

unity中判断是否联网,判断网络状态的两种方式

wla2996gpy032的博客 1876

CSP——脉冲神经网络

CSP——脉冲神经网络(AC)

Wu_L7的博客 2208

【低空经济】无人机充电站设计方案

随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;

2960

CCF CSP 202109-3 脉冲神经网络

#include<iostream> using namespace std; static unsigned long Next = 1; int myrand(void){ Next = Next * 1103515245 + 12345; return ((unsigned)(Next/65536)%32768); } int N,S,P,T; double Dt;//Delta_t int rn; struct neural{ double v_pre,u_pre; dou.

Brienz 662

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

linux内核协议栈 TCP选项之SACK选项概述

目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重...

2732

CCF-CSP 202303-1田地丈量

CCF-CSP 202303-1田地丈量

m0_72671017的博客 299

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

CSP202109第三题——脉冲神经网络

思路 定义存储结构 输入 正整数N,S,P,T,表示一共有N个神经元,S个突触和P个脉冲源,输 出时间刻T。 正实数Dt N个神经元,每个神经元v u a b c d,以及上一次的v和u。 结构体数组,数组下标为神经元的编号 P个脉冲源的r参数正整数。 S个突触。脉冲源的r参数正整数。两个整数s,t、一个实数w和一个正整数D ,其中s和t分别是入结点和出结点的编号;w和D分别表示脉冲强度和传播延迟。 计算所有脉冲源在1到T时刻,是否会发送脉冲,并将脉冲强度值赋值到连接的神经元lk中 计算每个时刻

weixin_45686898的博客 1562

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

CSP 202109-3 脉冲神经网络练习笔记2 100分代码

之前写过这道题的练习笔记1:脉冲神经网络练习笔记1 笔记1里贴出的代码只有66分,原因是运行超时(有没有人发现这个字其实是粉红色的 (。・∀・)ノ゙)。 笔记1里我发提出了一些当时未理解的问题: 1.mod的设置?:mod=max(mod,Tuchu[S_tmp].D+1); 2.时间t_tmp的设置?:int t_tmp=i % mod; 3.I_k数组为何要清空?memset( I_k[t_tmp], 0, sizeof I_k[t_tmp]); 其实总结起来: 这都是对T时间循环的不理解。 接下来说

想买很多漂亮衣服但是买不起的博客 1645

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第23次CSP认证(202109)

第23次CSP认证---202109第一题 :数组推导    (贪心)第二题 :非零段划分   (差分)第三题 :脉冲神经网络第四题 :收集卡牌 第一题 :数组推导    (贪心) 贪心循环一遍 在这里插入代码片 第二题 :非零段划分   (差分) 70分做法: 暴力,枚举 出现过的数字。 #include<bits/stdc++.h> #include<iostream> #define ll long long

weixin_45705885的博客 3596

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

求教C语言中伪随机数生成器中的一些问题

本人大一,在网上其他博主编写伪随机数生成器中看到如下源代码,对于红字中运算的部分难以理解,为什么对_Randseed进行了如下操作就可以生成伪随机数呢?!    _Randseed = _Randseed * 1103515245 + 12345;        return ((unsigned int)(_Randseed &gt;&gt; 16) &amp; RAND_MAX);  伪随机数...

RoyWayne的博客 510

CCF-CSP真题202112-1序列查询(Java满分题解)

本题来自2021年12月CCF-CSP真题中的第一题《序列查询》。

m0_74172965的博客 273

CCF-CSP考试基础备考讲解、实战向的解题技巧--冲锋2025年3月认证!!!

立即实践「调试加速三板斧」,从今天开始每道题都使用。

weixin_73790979的博客 9623

CCF CSP模拟真题解答示例

由于CSP考试的内容涵盖了计算机科学的多个方面,包括算法、数据结构、编程语言等,因此实际考试中的题目可能会更加复杂和深入。:栈是一种后进先出(LIFO,Last In First Out)的数据结构,即最后入栈的元素最先出栈。:位(Bit)是计算机中存储数据的基本单位,表示一个二进制数的位,其值只能是0或1。CCF CSP(Certified Software Professional)是中国计算机学会主办的软件能力认证考试,旨在评估参赛者在计算机科学和软件工程方面的基本知识和实践能力。

Dalao_zzl的博客 1140

CCF-CSP认证考试真题(含题解和c++代码)

CSP-CCF 认证考试真题题解,将不定期更新。如果大家有其他解法、发现我笔误或者可以 hack 我做法/程序(合法输入导致错误输出)的地方,欢迎通过私聊与我交流。

Pujx的博客 10万+

CCF-CSP备考【模拟考试系统共享】

系统说明如上,由于现在不能模拟所有考试了,需要使用兑换码兑换,但是模拟考试系统和报名系统的账号是分开的,所以我在想我们是不是可以集合大家的力量,只要有36个兑换码咱们就可以模拟这36次了呢?如果有愿意共享的可以直接将兑换码用于兑换该账号的其他模拟认证,也欢迎没有第35次认证模拟机会的同学登录我的账号去检查自己的代码是否正确。【邮箱:cs_plus123456@qq.com 密码:123456】现在把我新创的号的账号密码放在下面,我兑换了第35次认证的模拟。

insouciant_22的博客 2076

csp2021-09-3 脉冲神经网络

神经元与脉冲源是节点,突触是边,按题意模拟即可。 突触传递脉冲有一个时间D的延迟,开一个 add[1005][1005]add[1005][1005]add[1005][1005] 数组来记录不同时刻脉冲到达的强度。如果延迟最大是DmaxD_{max}Dmax​,那只要记录当前时刻往后 DmaxD_{max}Dmax​ 时刻内的变化就行,对Dmax+1D_{max}+1Dmax​+1 取模以节约空间。 把传递脉冲封装成函数,TLE。 所有时刻对1001取模,TLE。 最后卡着时限过去了( #include&

隔壁李叟的博客 4214

CCF-CSP认证备考要点

1.注意事项   报名时考试语言选择ALL。编程语言可以选C/C++、Java或Python,不同题可以选用不同语言。   考试时允许携带纸质的书籍和资料,携带纸质资料有助于提高考试成绩。 2.考前准备   (1)不裸考   了解历年考题,了解考题的题型、内容和难度,并且逐题做过。   官方网站:CCF计算机职业资格认证。   在官方网站上注册用户,登录官方网站,逐题练习历年考题。   (2)阅读题解   通过阅读历年题解是一种快速学习的好方法,可以了解解题方法,积累解题经验。 ..

海岛Blog 8万+
上一篇: 装备合成(三分)
下一篇: 矩阵消除游戏(状压+dfs)
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值