当前位置: 首页 > news >正文

202109-3 CCF 脉冲神经网络 66分题解 + 解题思路 + 解题过程

解题思路

根据题意,脉冲源的阈值大于随机数时,会向其所有出点发送脉冲
神经元当v>=30时,会向其所有出点发送脉冲,unordered_map <int, vector > ne; //存储神经元/脉冲源的所有出点集合vector
所有脉冲会有一定的延迟,所以使用unordered_map <int, unordered_map <int, double>> I; //存储神经元i的j时刻收到的所有脉冲和
暴力做法就是遍历每一时刻,每一时刻更新神经元和脉冲源,最后统计答案

解题过程

  1. 一开始用结构体实现,并且没有考虑到一个神经元/脉冲源可能会对多个神经元发出脉冲这个问题,直接按照题意纯模拟,得了16分。。
  2. 发现了一对多的情况,在结构体中加入了一个vector存储所有的出点,爆内存了,得了33分。。
    在这里插入图片描述
  3. 由于每个神经元也不是每一时刻都会收到脉冲,所以稍微改了下,不采用数组存储,采用unorder_map存储,不爆内存了,TLE了。。66分。。在这里插入图片描述

66分暴力版本代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <unordered_map>using namespace std;const int N = 1010;static unsigned long nt = 1;/* RAND_MAX assumed to be 32767 */
int myrand(void) {nt = nt * 1103515245 + 12345;return((unsigned)(nt/65536) % 32768);
}struct node
{int id;double w;int D;
};double v[N], u[N], a[N], b[N], c[N], d[N];
unordered_map <int, vector <node>> ne;
unordered_map <int, unordered_map <int, double>> I;
int sum[N];
int r[2 * N];int main()
{int n, s, p, t;cin >> n >> s >> p >> t;double dt;cin >> dt;int rn;for (int i = 0; i < n; i += rn) //0 ~ n - 1神经元{cin >> rn;double vv, uu, aa, bb, cc, dd;cin >> vv >> uu >> aa >> bb >> cc >> dd;for (int j = i; j < i + rn; j ++){v[j] = vv;u[j] = uu;a[j] = aa;b[j] = bb;c[j] = cc;d[j] = dd;}}for (int i = n; i < n + p; i ++) //n ~ n + p - 1脉冲源{cin >> r[i];}for (int i = 0; i < s; i ++) //突触{int bn, ed;double w;int D;cin >> bn >> ed >> w >> D;struct node t = {ed, w, D};ne[bn].push_back(t);}for (int i = 1; i <= t; i ++) //遍历每一时刻{for (int j = 0; j < n; j ++) //更新神经元{double pv = v[j], pu = u[j];v[j] = pv + dt * (0.04 * pv * pv + 5.0 * pv + 140.0 - pu) + I[j][i];u[j] = pu + dt * a[j] * (b[j] * pv - pu);if (v[j] >= 30.0){v[j] = c[j];u[j] += d[j];sum[j] ++;for (auto x : ne[j]) //向所有出点释放脉冲{int id = x.id;double w = x.w;int D = x.D;I[id][i + D] += w;}}}for (int j = n; j < n + p; j ++) //脉冲源释放脉冲{int x = myrand();if (r[j] > x) //r大于随机值{for (auto x : ne[j]) //向所有出点释放脉冲{int id = x.id;double w = x.w;int D = x.D;I[id][i + D] += w;}}}}double r1 = v[0], r2 = v[0];int s1 = sum[0], s2 = sum[0];for (int i = 1; i < n; i ++) //得到答案{r1 = min(r1, v[i]);r2 = max(r2, v[i]);s1 = min(s1, sum[i]);s2 = max(s2, sum[i]);}printf("%.3lf %.3lf\n", r1, r2);cout << s1 << " " << s2;return 0;
}

相关文章:

202109-3 CCF 脉冲神经网络 66分题解 + 解题思路 + 解题过程

解题思路 根据题意&#xff0c;脉冲源的阈值大于随机数时&#xff0c;会向其所有出点发送脉冲 神经元当v>30时&#xff0c;会向其所有出点发送脉冲&#xff0c;unordered_map <int, vector > ne; //存储神经元/脉冲源的所有出点集合vector 所有脉冲会有一定的延迟&am…...

Aurora简介

Amazon Aurora是一种兼容MySQL和PostgreSQL的商用级别关系数据库&#xff0c;它既有商用数据库的性能和可用性&#xff08;比如Oracle数据库&#xff09;&#xff0c;又具有开源数据库的成本效益&#xff08;比如MySQL数据库&#xff09;。 Aurora的速度可以达到MySQL数据库的…...

【python实操】用python写软件弹窗

文章目录前言组件label 与 多行文本复选框组件Radiobutton单选组件Frame框架组件labelframe标签框架列表框Listboxscrollbar滚动条组件scale刻度条组件spinbox组件Toplevel子窗体组件PanedWindow组件Menu下拉菜单弹出菜单总结针对组件前言 python学习之路任重而道远&#xff0…...

Ubuntu 常用操作

版本22.04 1、开启 root # 输入新密码 sudo passwd rootUbuntu以root账号登录桌面 默认情况是不允许用root帐号直接登录图形界面的。 Ubuntu 默认使用 GNOME&#xff0c;GNOME 使用 GDM 显示管理器。 为了允许以 root 身份登录到 GNOME&#xff0c;你需要对位于 ​​/etc/…...

井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例2&#xff1a;井字棋 井字棋是一种在3 * 3格子上进行的连珠游戏&#xff0c;又称井字游戏。井字棋的游戏有两名玩家&#xff0c;其中一个玩家画圈&#xff0c;另一个玩家画叉&#xff0c;轮流在3 * 3格子上画上自己的符号&#xff0c;最先在横向、纵向、或斜线方向连成一条…...

谷粒学院开发(三):统一日志、异常及前端准备工作

特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…...

华为OD机试题 - 招聘(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:招聘题目输入输出示例一输入输出说明示例二输入输出说明示例三输…...

关于SQL优化的几点说明

1. ORACLE DBA是如何进行SQL优化的 作为一个Oracle数据库管理员(DBA)&#xff0c;SQL优化是他们的日常工作之一&#xff0c;主要目标是优化查询性能&#xff0c;减少查询时间&#xff0c;并提高数据库的整体性能。 以下是Oracle DBA如何进行SQL优化的一般流程&#xff1a; 监控…...

使用高精度秒表StopWatch测试DateTime.Now的精度

StopWatch使用的命名空间&#xff1a;using System.Diagnostics;StopWatch的使用方法&#xff1a;创建Stopwatch对象&#xff1a;stopwatch&#xff1b;stopwatch计时表开启&#xff1a;stopwatch.Start();stopwatch计时表关闭&#xff1a;stopwatch.Stop();计算stopwatch.Stop…...

【C++】vector的使用及其模拟实现

这里写目录标题一、vector的介绍及使用1. vector的介绍2. 构造函数3. 遍历方式4. 容量操作及空间增长问题5. 增删查改6. vector二维数组二、vector的模拟实现1. 构造函数2. 迭代器和基本接口3. reserve和resize4. push_back和pop_back5. insert和erase5. 迭代器失效问题5. 浅拷…...

[洛谷-P2585][ZJOI2006]三色二叉树(树形DP+状态机DP)

[洛谷-P2585][ZJOI2006]三色二叉树&#xff08;树形DP状态机DP&#xff09;一、题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示数据规模与约定二、分析1、递归建树2、树形DP 状态机DP&#xff08;1&#xff09;状态表示&#xff08;2&#xff09;状态转移三、…...

BI技巧丨计算组

PowerBI有三大工具&#xff0c;分别是DAX Studio&#xff0c;Tabular Editor和Bravo。 DAX Studio通常我们会用来进行性能分析和DAX调优使用&#xff0c;Bravo一般用来批量格式化DAX&#xff0c;而Tabular Editor主要的功能就是计算组。 计算组这个名词&#xff0c;相信很多小伙…...

PMP项目管理项目范围管理

目录1 项目范围管理概述2 规划范围管理3 收集需求4 定义范围5 创建 WBS6 确认范围7 控制范围1 项目范围管理概述 项目范围管理包括确保项目做且只做所需的全部工作&#xff0c;以成功完成项目的各 个过程。管理项目范围主要在于定义和控制哪些工作应在项目内&#xff0c;哪些工…...

Flink 定时加载数据源

一、简介 flink 自定义实时数据源使用流处理比较简单&#xff0c;比如 Kafka、MQ 等&#xff0c;如果使用 MySQL、redis 批处理也比较简单 如果需要定时加载数据作为 flink 数据源使用流处理&#xff0c;比如定时从 mysql 或者 redis 获取一批数据&#xff0c;传入 flink 做处…...

ChatGPT、人工智能、人类和一些酒桌闲聊

© 2023 Conmajia Initiated 10th March, 2023 昨天跟某化学家喝酒&#xff0c;期间提到了 ChatGPT。他的评价是&#xff1a;这鬼东西大量输出毫无意义、错漏百出甚至是虚假的信息&#xff0c;“in a confident accent”。例如某次 GPT 针对“描述某某记者”这一问题&#…...

WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查

目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常&#xff0c;程序闪退 5、VS调试时看不到有效的函数调用堆…...

Golang并发编程

Golang并发编程 文章目录Golang并发编程1. 协程2. channel2.1 channel的创建2.2 使用waitGroup实现同步3. 并发编程3.1 并发编程之runtime包3.2 mutex互斥锁3.3 channel遍历3.3.1 for if遍历3.3.2 for range3.4 select switch3.5 Timer3.5.1 time.NewTimer()3.5.2 Stop、reset…...

windows+Anaconda环境下安装BERT成功安装方法及问题汇总

前言 在WindowsAnaconda环境下安装BERT&#xff0c;遇到各种问题&#xff0c;几经磨难&#xff0c;最终成功。接下来&#xff0c;先介绍成功的安装方法&#xff0c;再附上遇到的问题汇总 成功的安装方法 1、创建虚拟环境 注意&#xff1a;必须加上python3.7.12以创建环境&a…...

git - 简易指南

git - 简易指南 创建新仓库 创建新文件夹&#xff0c;打开&#xff0c;然后执行 git init 以创建新的 git 仓库。 检出仓库 执行如下命令以创建一个本地仓库的克隆版本&#xff1a; git clone /path/to/repository 如果是远端服务器上的仓库&#xff0c;你的命令会是这个样…...

[论文笔记]Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

引言 我们知道Transformer很好用&#xff0c;但它设定的最长长度是512。像一篇文章超过512个token是很容易的&#xff0c;那么我们在处理这种长文本的情况下也想利用Transformer的强大表达能力需要怎么做呢&#xff1f; 本文就带来一种处理长文本的Transformer变种——Transf…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...