[CF383]一个迟来的检讨

本文回顾了一次比赛经历,分析了个人在算法题上的表现,包括注意力分散、缺乏耐心等问题,并详细讨论了几道典型题目(如位运算计数、电话游戏最小轮数、舞会邀请最优解)的解题思路和自我反省。

这场比赛是亚洲区比赛回来之后打得比较正经的一次个人赛,同时也暴露出了我最近精力及其的不集中,做事情非常的没有条理。非常的没有耐心,需要冷静下来。

Problem B

There are some beautiful girls in Arpa’s land as mentioned before.

Once Arpa came up with an obvious problem:

Given an array and a number x, count the number of pairs of indices i, j (1 ≤ i < j ≤ n) such that , where is bitwise xor operation (see notes for explanation).
这一题,充分暴露了我做事十分不专心的特点,我一看,就想到了下面的公式:

ans=0nnum[i]num[xxori]

但是,这个排列组合公式什么时候可以用啊,是在两个要做笛卡尔积的集合没有交集的时候才能使用啊,如果x=0,那么这个公式很显然是错误的。

Problem C

Someday Arpa shouted Owf loudly from the top of the palace and a funny game started in Arpa’s land. The rules are as follows.

The game consists of rounds. Assume person x wants to start a round, he calls crushx and says: “Oww…wwf” (the letter w is repeated t times) and cuts off the phone immediately. If t > 1 then crushx calls crushcrushx and says: “Oww…wwf” (the letter w is repeated t - 1 times) and cuts off the phone immediately. The round continues until some person receives an “Owf” (t = 1). This person is called the Joon-Joon of the round. There can’t be two rounds at the same time.

Mehrdad has an evil plan to make the game more funny, he wants to find smallest t (t ≥ 1) such that for each person x, if x starts some round and y becomes the Joon-Joon of the round, then by starting from y, x would become the Joon-Joon of the round. Find such t for Mehrdad if it’s possible.

Some strange fact in Arpa’s land is that someone can be himself’s crush (i.e. crushi = i).
这道题,由体现出来我做事十分没有耐心,如果将每个人当作一个节点的话,那么每个节点的出度为1,如果存在一个节点没有入度的话,那么肯定题目无解,我们从每一个节点出发DFS这个连通分支,如果不可以返回这个节点,那么表明无解。如果得到一个奇数长度的环,则说明需要奇数长度,否则需要偶数长度的一半。

Problem D

Just to remind, girls in Arpa’s land are really nice.

Mehrdad wants to invite some Hoses to the palace for a dancing party. Each Hos has some weight wi and some beauty bi. Also each Hos may have some friends. Hoses are divided in some friendship groups. Two Hoses x and y are in the same friendship group if and only if there is a sequence of Hoses a1, a2, …, ak such that ai and ai + 1 are friends for each 1 ≤ i < k, and a1 = x and ak = y.
Arpa allowed to use the amphitheater of palace to Mehrdad for this party. Arpa’s amphitheater can hold at most w weight on it.
Mehrdad is so greedy that he wants to invite some Hoses such that sum of their weights is not greater than w and sum of their beauties is as large as possible. Along with that, from each friendship group he can either invite all Hoses, or no more than one. Otherwise, some Hoses will be hurt. Find for Mehrdad the maximum possible total beauty of Hoses he can invite so that no one gets hurt and the total weight doesn’t exceed w.
这道题更加的搞笑,首先我的并查集居然写错了,完全忘记了合并并查集就是合并并查集的根节点。然后做背包转移的时候实际上就是将某个并查集打包成一个物品转移进去。然而我想的太过复杂,代码写的乱七八糟,看着我很想笑。

检讨

我本来以为,亚洲区赛是一个开始,新生活的开始,我可以更加开心,更有自信。但是,我发现我的心态发生了很大的变化,变得完全没有从前那么快乐了。我还记得之前我经历过的一切的一切。我还记得暑假我每天往返于实验室,拼命的看论文时的场景。虽然每天都是那么累,但是又有什么可以记得的呢?我还记得我一个人回寝室的路上,一遍一遍听着的那首歌“永远不要盲目追星,长大后的你可能比他还行”。我想要享受生活中所有美好的部分,实现内心最底层的愿望。
但是,现在,一切都变了。亚洲赛回来之后,我再也没有从前的那么低调了。各种的盲目称赞麻痹了我的双眼,让我忘记了天的那边还有着更大的世界。我变得没有那么努力了,说话也不在像从前那么谦逊。变得无趣和无聊。做事情一点条理也没有,写的代码我自己都不忍心再看。看看那些大牛们,我觉得,我为我所做的所有的事情而感到害臊。
不管怎么样,现在还来得及。回归当初的美好,做一个快乐的孩子。

【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数&mdash;&mdash;正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
<think>我们正在处理一个关于STM32平台上CF卡操作的请求。用户提供了两个引用,但这两个引用分别关于SD卡的SPI操作和STM32的CRC32计算,与CF卡并不直接相关。然而,我们可以借鉴SPI协议的操作,因为CF卡也可以通过SPI模式进行访问。注意:CF卡(CompactFlash)有两种接口模式:PCCardmemorymode和PCCard I/O mode。但通常,在嵌入式系统中,我们使用CF卡的TrueIDE模式(类似于ATA接口)或SPI模式。由于用户提到了SPI(在引用[1]中是关于SD卡的SPI操作),我们假设用户希望使用SPI模式操作CF卡。但是,需要澄清的是:CF卡通常使用并行接口(TrueIDE模式),但一些CF卡也支持SPI模式。因此,我们这里提供SPI模式下的CF卡操作示例。由于CF卡在SPI模式下的命令和操作与SD卡类似,我们可以参考SD卡的SPI操作流程,但具体命令和初始化序列有所不同。以下步骤基于SPI模式下的CF卡操作(参考CF+andCompactFlashSpecification Revision4.1):1.初始化SPI接口(设置速率、模式等)。2.发送命令初始化CF卡(类似于SD卡的初始化过程,但命令不同)。3.读取和写入数据块。注意:CF卡在SPI模式下使用与SD卡类似的命令结构(CMD0,CMD1等),但具体的命令值可能不同。这里我们参考CF卡规范。由于CF卡在SPI模式下并不像SD卡那样普遍,我们可能需要查找具体资料。但我们可以给出一个大致框架。示例代码框架:步骤1:SPI初始化(略,与引用[1]中的SD卡SPI初始化类似)步骤2:CF卡初始化(发送命令序列)步骤3:读写操作由于具体命令序列较长,这里只给出一个简化的示例,重点在于读写单个字节的函数(类似于引用[1]中的函数)和初始化步骤。注意:以下代码是基于假设的,实际使用时需要根据CF卡规范调整命令和流程。首先,我们实现一个SPI读写单字节的函数(与引用[1]类似):</think>### STM32 CF卡读写操作示例代码 以下是基于STM32的CF卡(CompactFlash)SPI模式读写操作的核心代码实现,结合了CF卡规范与STM32外设特性: #### 1. SPI接口初始化(参考SPI协议时序[^1]) ```c void CF_SPI_Init(void) { // 启用SPI和GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE); // 配置SPI引脚(以SPI1为例) GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // SCK/MISO/MOSI GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // 片选引脚配置 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; // CS GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_SetBits(GPIOA, GPIO_Pin_4); // 初始置高(取消选中) // SPI参数配置 SPI_InitTypeDef SPI_InitStruct; SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 初始低速 SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &SPI_InitStruct); SPI_Cmd(SPI1, ENABLE); } ``` #### 2. CF卡初始化流程(关键步骤) ```c #define CF_CMD_RESET 0x01 #define CF_CMD_INIT 0x02 #define CF_CMD_READ_SECTOR 0x03 #define CF_CMD_WRITE_SECTOR 0x04 uint8_t CF_Init(void) { CF_CS_LOW(); // 选中CF卡 // 步骤1:发送复位命令(参考SD卡初始化流程[^1]) CF_SendCommand(CF_CMD_RESET, 0x00, 0x00); Delay_ms(10); // 等待复位完成 // 步骤2:初始化命令 uint8_t response = CF_SendCommand(CF_CMD_INIT, 0x00, 0x01); CF_CS_HIGH(); // 取消选中 // 验证响应码(0x00表示成功) return (response == 0x00) ? 1 : 0; } ``` #### 3. 单字节SPI读写函数(核心时序实现) ```c // 基于SPI时序的字节读写[^1] uint8_t CF_SPI_ReadWriteByte(uint8_t txData) { while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); // 等待发送缓冲区空 SPI_I2S_SendData(SPI1, txData); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); // 等待接收完成 return SPI_I2S_ReceiveData(SPI1); } ``` #### 4. 扇区读写操作(512字节/扇区) ```c // 读取指定扇区 uint8_t CF_ReadSector(uint32_t sector, uint8_t *buffer) { CF_CS_LOW(); // 发送读命令 CF_SendCommand(CF_CMD_READ_SECTOR, (sector >> 16) & 0xFF, sector & 0xFFFF); // 等待数据就绪(CF卡会先返回0xFE) while(CF_SPI_ReadWriteByte(0xFF) != 0xFE); // 读取512字节数据 for(int i=0; i<512; i++) { buffer[i] = CF_SPI_ReadWriteByte(0xFF); } // 读取CRC校验(可选参考CRC32实现[^2]) uint16_t crc = (CF_SPI_ReadWriteByte(0xFF) << 8); crc |= CF_SPI_ReadWriteByte(0xFF); CF_CS_HIGH(); return 1; } // 写入指定扇区 uint8_t CF_WriteSector(uint32_t sector, uint8_t *data) { CF_CS_LOW(); // 发送写命令 CF_SendCommand(CF_CMD_WRITE_SECTOR, (sector >> 16) & 0xFF, sector & 0xFFFF); // 发送数据起始标记 CF_SPI_ReadWriteByte(0xFE); // 写入512字节数据 for(int i=0; i<512; i++) { CF_SPI_ReadWriteByte(data[i]); } // 发送CRC占位符(实际应用可集成CRC32[^2]) CF_SPI_ReadWriteByte(0xFF); CF_SPI_ReadWriteByte(0xFF); // 等待写入完成 while(CF_SPI_ReadWriteByte(0xFF) == 0); CF_CS_HIGH(); return 1; } ``` #### 5. 命令发送封装函数 ```c uint8_t CF_SendCommand(uint8_t cmd, uint8_t param_h, uint16_t param_l) { // 发送命令头 CF_SPI_ReadWriteByte(cmd | 0x40); // 命令格式:01xxxxxx // 发送参数 CF_SPI_ReadWriteByte(param_h); CF_SPI_ReadWriteByte((param_l >> 8) & 0xFF); CF_SPI_ReadWriteByte(param_l & 0xFF); // CRC占位(实际应用建议使用STM32 CRC模块[^2]) CF_SPI_ReadWriteByte(0x95); // 等待响应(超时机制需实现) uint8_t response; int timeout = 1000; while(((response = CF_SPI_ReadWriteByte(0xFF)) == 0xFF) && timeout--); return response; } ``` ### 关键注意事项: 1. **时序要求**:CF卡SPI模式需严格遵循时序规范,初始化阶段建议使用≤400kHz时钟[^1] 2. **CRC校验**:实际应用应集成STM32硬件CRC模块(参考CRC32实现[^2]) 3. **错误处理**:需添加超时检测和状态响应验证 4. **电压匹配**:确认CF卡工作电压(3.3V或5V)与STM32开发板匹配 5. **物理接口**:CF卡插座需正确连接SPI信号线(注意MISO/MOSI方向) > ⚠️ **重要提示**:以上代码为简化示例,实际部署需根据具体CF卡型号调整命令集和时序参数,建议参考CF卡数据手册中的SPI模式章节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值