CSP-《I‘m stuck!》-感悟
题目


做题过程
注:黄色高亮表示需要注意的地方,蓝色粗体表示代码思路
好久没有写过代码了,今天做这道编程题,简直是灾难现场。
上午编程完后发现样例没有通过,检查发现算法思路出现了问题:我计数了S不能到达的格子。【要重视题目中的所有条件,特别时限制条件】
中午吃完饭后重新整理了思路:使用DFS分别标记可以从S出发到达的格子和可以到达T的格子,两种标记分别放在F1和F2数组中,其中1表示标记。
接下来又遇到了编译错误的问题,借鉴网上的说法直接再代码前加入一下万能引入便通过了:
#include <bits/stdc++.h>
using namespace std;
编译通过后,系统显示我只有10分,我检查了代码的思路,使用各种样例检查也没有问题。我自己写了个生成随机样例的代码:
#include<bits/stdc++.h>
using namespace std;#define R 50
#define C 50int main(){//随机生成地图 char M[8]={'+','.','+','|','+','-','+','#'};char a[R][C];srand((unsigned int)time(NULL));for(int i = 0; i < R; i++)for(int j = 0; j < C; j++)a[i][j]=M[rand() % 8];srand((unsigned int)time(NULL));a[rand() % R][rand() % C] = 'S';a[rand() % R][rand() % C] = 'T';//输出到文件 FILE* fp = fopen("C:/Users/kaoyan/Desktop/test.txt", "w");fprintf(fp,"%d %d\n",R, C); for(int i = 0; i < R; i++){for(int j = 0; j < C; j++)fprintf(fp,"%c",a[i][j]);fprintf(fp,"\n");}fclose(fp);return 0;
}
我在dev-c++尝试了很多次都没有问题,这使我很烦恼。纠结了一下午。
吃完晚饭后,我仔细想了想,那么多样例都没有问题,我的代码应该时没有问题的,而代码在dev-c++上运行和提交到系统运行的区别就在于输入不同,我便去检查了输入那部分的代码。我尝试去注释掉fflush(stdin);后再提交惊奇地发现时满分o( ̄▽ ̄)ブ
我想,这可能是因为系统后台是不标准输入,至于避免回车换行地读入,只需要在后面的scanf中加上空格就行:scanf(" %c",MAP + i);
代码
#include <bits/stdc++.h>
using namespace std;int R, C, S, T; //S记录开始位置, T记录目标位置
char *MAP; //地图
char *F1; //非0格子表示可以从起点S到达的格子
char *F2; //非0格子表示可以到达目T的格子 //从格子G是否可以上移
bool CanUp(int G){if(G-C>=0 && MAP[G-C]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='|'))return true;elsereturn false;
}//从格子G是否可以下移
bool CanDown(int G){if(G+C<R*C && MAP[G+C]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='|'||MAP[G]=='.'))return true;elsereturn false;
}//从格子G是否可以左移
bool CanLeft(int G){if(G%C>0 && MAP[G-1]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='-'))return true;elsereturn false;
}//从格子G是否可以右移
bool CanRight(int G){if(G%C<C-1 && MAP[G+1]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='-'))return true;elsereturn false;
}//递归遍历可以从G到达的邻居并更改F1
void ToNeighbor(int G){int n;//邻居位置//向上走 n = G - C; if(!F1[n] && CanUp(G)){F1[n] = 1;ToNeighbor(n);}//向下走 n = G + C; if(!F1[n] && CanDown(G)){F1[n] = 1;ToNeighbor(n);}//向左走 n = G - 1; if(!F1[n] && CanLeft(G)){F1[n] = 1;ToNeighbor(n);}//向右走 n = G + 1; if(!F1[n] && CanRight(G)){F1[n] = 1;ToNeighbor(n);}
}//递归遍历可以到达G的邻居并更改F2
void FromNeighbor(int G){int n;//邻居位置//判断上邻居n = G - C;if(n >= 0 && MAP[n] != '#' && !F2[n] && CanDown(n)){F2[n] = 1;FromNeighbor(n);}//判断下邻居n = G + C;if(n < R*C && MAP[n] != '#' && !F2[n] && CanUp(n)){F2[n] = 1;FromNeighbor(n);}//判断左邻居n = G - 1;if(G%C > 0 && MAP[n] != '#' && !F2[n] && CanRight(n)){F2[n] = 1;FromNeighbor(n);}//判断右邻居n = G + 1;if(G%C < C-1 && MAP[n] != '#' && !F2[n] && CanLeft(n)){F2[n] = 1;FromNeighbor(n);}
}int main(){//初始化 scanf("%d%d",&R,&C); //fflush(stdin);MAP = (char*)malloc(sizeof(char) * R * C);F1 = (char*)malloc(sizeof(char) * R * C);F2 = (char*)malloc(sizeof(char) * R * C);for(int i = 0; i < R * C; i++){scanf(" %c",MAP + i);if(MAP[i] == 'S')S = i;if(MAP[i] == 'T')T = i;F1[i] = 0;F2[i] = 0; }//填充F1(非0格子表示可以从起点到达的格子 ) F1[S] = 1;ToNeighbor(S);//递归遍历可以从S到达的格子并更改F1 //填充F2(非0格子表示可以到达目的的格子) F2[T] = 1;FromNeighbor(T);//递归遍历可以到达的T的格子并更改F1 if(!F1[T]){//从S不能到达T printf("I'm stuck!");return 0;}//计数有特征的格子个数int q = 0;for(int i = 0; i < R*C; i++)if(F1[i] == 1 && F2[i] == 0)q++;printf("%d",q);return 0;
}
相关文章:
CSP-《I‘m stuck!》-感悟
题目 做题过程 注:黄色高亮表示需要注意的地方,蓝色粗体表示代码思路 好久没有写过代码了,今天做这道编程题,简直是灾难现场。 上午编程完后发现样例没有通过,检查发现算法思路出现了问题:我计数了S不能到…...
[实践篇]13.19 Qnx进程管理slm学习笔记(二)
【QNX Hypervisor 2.2用户手册】目录(完结) 四,配置文件结构 4.1 根元素 一个配置文件的XML根元素是system,如下: <SLM:system>-- component and module descriptions -- </SLM:system> 4.2 组件 一个进程对于SLM来说就是一个组件。在配置文件中,你必须为一…...
(免费分享)基于 SpringBoot 的高校宿舍管理系统带论文
项目描述 系统代码质量高,功能强大,带论文。 系统的功能主要有: (1)基本信息管理 基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对 它们进行增删查改等操作。 &#x…...
运筹系列78:cbc使用介绍
1. 上手 1.1 快速使用 首先是简单的调用测试,在mac上首先安装clp的库:brew install coin-or-tools/coinor/cbc,然后新建项目进行调用,各项配置如下,注意要添加的library和directory比较多: 1.2 命令行方…...
RocketMQ底层源码解析——事务消息的实现
1. 简介 RocketMQ自身实现了事务消息,可以通过这个机制来实现一些对数据一致性有强需求的场景,保证上下游数据的一致性。 以电商交易场景为例,用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多个子系统…...
学习802.11之MAC帧格式(一篇就够!)
802.11规范的关键在于MAC(媒介访问控制层),MAC位于各式物理层之上,控制数据传输。负责核心成帧操作以及与有线骨干网络之间的交互。 802.11 MAC采用载波监听多路访问(CSMA)机制来控制对传输媒介的访问&…...
使用阿里云IoT Studio建立物模型可视化界面
使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…...
HBase 复习 ---- chapter07
HBase 复习 ---- chapter07部署 HBase(运维) 1:部署 HBase 实际是部署了三个技术(hadoop zookeeper hbase) hadoop hdfs mapreduce common hdfs namenode datanode secondaryNamenode yarn ResourceManager&a…...
跟我一起写Makefile--个人总结
此篇笔记是根据陈皓大佬《跟我一起写Makefile》学习所得 文章目录换行符clean变量make的自动推导另类风格的Makefile清空目标文件的规则cleanMakefile总述显示规则隐晦规则变量的定义注释引用其它的Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规则中…...
设计模式之为什么要学好设计模式
目录1 回顾软件设计原则2 设计模式总览3 经典框架都在用设计模式解决问题1 回顾软件设计原则 不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设…...
大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏…...
【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...
67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...
代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...
Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...
阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...
MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
