编程技巧:优化
第一种:构造回文串---构造法
题目描述
[NOIP2016 普及组] 回文日期 - 洛谷
那么这道题我们总结一些题目要求:
1.输入两个字符串,为起始和终止日期
2.年份不会出现前导0
3.如果是回文日期,答案+1
4.如果月份是2,要判断闰年
5.如果月份或年份有前导0,转string时要把前导0加上判回文
第一种60pts做法:
因为题目说60%数据date1 = date2
那这样就只用判断回文就行了
第二种80pts做法
我们模拟整个年,月,日,来判断回文不回文
#include<bits/stdc++.h>
using namespace std;
int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//月份数组
string sd;//起始日期start date
string ed;//结束日期end date
bool judge1(int x){//判断闰年if(x % 400 == 0 || (x % 100 != 0 && x % 4 == 0)) return true;else return false;
}
bool judge2(string x){//判断回文int len = x.size();for(int i = 0; i < len / 2; i ++){if(x[i] != x[len - i - 1]) return false;//因为下标从0开始,而len是从1开始,所以减去1}return true;
}
int main(){cin >> sd >> ed;if(sd == ed){if(judge2(sd)) cout << 1;else cout << 0;return 0;}int ans = 0;int sy = 0, ey = 0;for(int i = 0; i < 4; i ++){sy = sy * 10 + (sd[i] - '0');ey = ey * 10 + (ed[i] - '0');}for(int year = sy; year <= ey; year ++){//构造年份if(judge1(year)) mon[2] ++;//如果是闰年,把2月天数变成29for(int month = 1; month <= 12; month ++) {//月份for(int day = 1; day <= mon[month]; day ++){string s = "";string xx, yy, zz;if(month < 10) yy = '0' + to_string(month);//判断月<10加前导0的情况else yy = to_string(month);if(day < 10) zz = '0' + to_string(day);//判断天<10加前导0的情况else zz = to_string(day);xx = to_string(year);s = xx + yy + zz;if(judge2(s)){cerr << "the huiwen year :" << s << endl;//本地输出,评测机不输出的cerrans ++;}}}}cout << ans;return 0;
}
100pts做法
方法1:
那么我们根据题意可知,年份不能有前导0,也就意味着前4位一定是年份,那么我们知道年份根据年份映射另一半,在判断日期合不合法,的做法
方法2:
既然可以用年份映射月份,也可以用月份映射年份,也就是枚举日期,最大366,常数级别100分神操作
小结
我们既然枚举天数判回文超时,那就试一下构造回文串来判断是否合法
第二种:记忆路径----剪枝
题目描述:
https://www.luogu.com.cn/problem/P2010?contestId=202430
总结题目要求~~~:
1.我们每一步往外走的格子上标记的数字不能和当前格子一样
2.求最多走几步
那我们一看数据范围,这么大!!!
那么我们就想着记忆路径
通过上面这张图可看出我们可以分割成多个01块,每个块中个个点的最大扩散值都一样,所以我们可以整一个标记数组,来记下块的编号,在有一个ans数组,存储编号为vis[x][y]的点最大扩散范围
深搜代码:
#include<cstdio>
#include<cstring>
int n,m,ans[100002],x,y,f[1002][1002];
char s[1002][1002];
void dfs(int r,int c,int z,int lll){if (r<0 || r>=n || c<0 || c>=n || f[r][c]!=-1 || s[r][c]-'0'!=z)return;f[r][c]=lll;ans[lll]++;dfs(r-1,c,!z,lll);dfs(r+1,c,!z,lll);dfs(r,c-1,!z,lll);dfs(r,c+1,!z,lll);
}
int main()
{scanf("%d%d",&n,&m);for (int i=0;i<n;i++)scanf("%s",s[i]);memset(f,-1,sizeof(f));for (int i=0;i<m;i++){scanf("%d%d",&x,&y);x--;y--;if (f[x][y]==-1)dfs(x,y,s[x][y]-'0',i);else ans[i]=ans[f[x][y]];}for (int i=0;i<m;i++)printf("%d\n",ans[i]);return 0;
}
广搜代码:
#include<bits/stdc++.h>//万头
using namespace std;
int n,m,x,y;
struct queue
{char c;bool is;
}a[1000][1000];
int quex[1000002],quey[1000002],l=1,r=0;
int dx[5]={0,0,0,-1,1},dy[5]={0,-1,1,0,0};
//定义一坨东西
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf(" %c",&a[i][j].c);//输入while(m--){scanf("%d%d",&x,&y);quex[++r]=x;quey[r]=y;//将输入点压入队列a[x][y].is=1;//输入点已走过int cnt=1;//记录有几种方法while(l<=r){for(int k=1;k<=4;k++){int tx=quex[l]+dx[k],ty=quey[l]+dy[k];if(tx<1||tx>n||ty<1||ty>n) continue;if(a[tx][ty].c==a[quex[l]][quey[l]].c) continue;if(a[tx][ty].is==1) continue;//判断a[tx][ty].is=1;quex[++r]=tx;quey[r]=ty;//将当前点推入队列cnt++;//方法++}l++;//已经搜完,出队}printf("%d\n",cnt);//输出l=1,r=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)a[i][j].is=0;}return 0;
}
小结
通常数据量很大的搜索题我们用记忆路径来剪枝
相关文章:

编程技巧:优化
第一种:构造回文串---构造法 题目描述 [NOIP2016 普及组] 回文日期 - 洛谷 那么这道题我们总结一些题目要求: 1.输入两个字符串,为起始和终止日期 2.年份不会出现前导0 3.如果是回文日期,答案1 4.如果月份是2,要…...

pycharm中使用anaconda创建多环境,无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
问题描述 用的IDE是: 使用anaconda创建了一个Python 3.9的环境 结果使用pip命令的时候,报错 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 为了不再增加系统变量,我们直接将变量添加在当前项目中你的Ter…...

【Linux】进程周边之优先级
目录 一、优先级 1.为什么要有进程优先级? 2.什么是进程优先级? 3.优先级的初始设定 3.1 PRI 和 NI 3.2如何修改优先级?(sudo/root) 3.2.1 概念: 3.2.2 如何查看进程的优先级? 3.3.3 或…...

Linux高级编程_29_信号
文章目录 进程间通讯 - 信号信号完整的信号周期信号的编号信号的产生发送信号1 kill 函数(他杀)作用:语法:示例: 2 raise函数(自杀)作用:示例: 3 abort函数(自杀)作用:语法:示例: 4 …...

uniapp修改uni-ui组件样式(对微信小程序/H5有效,vue3)
寻找要修改的样式 使用开发者工具找到具体要修改的class类名 修改 <style lang"scss">//.nav为上一级的class.nav::v-deep .uni-navbar--border {border-bottom-style: none !important;} </style>完整代码 <template><view><uni-na…...

Python 封装 socket 为 [TCP/UDP/MULTICAST] 服务端
在新线程中创建 TCP/UDP/MULTICAST 协议的服务端套接字,接收客户端的连接请求或数据,并调用 on_recv 回调函数处理数据。 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import threading import multiprocessingclass ServerSocket:de…...

c++ STL库 unordered_map
#include <iostream #include <string #include <unordered_map int main() { // 创建一个 unordered_map std::unordered_map<std::string, int> wordCount; // 插入元素 wordCount["apple"] 1; wordCount["banana"] 2;// 使用 insert…...

【接口测试】任务1:登录接口
需要技能竞赛软件测试资料的同学们可s聊我,详细了解 任务实现要求 根据系统管理员—登录—接口API文档,编写接口测试用例,分别使用PostMan及JMeter进行接口测试,需要检查系统接口是否能正常工作,返回值是否正确&#…...

二、Spring Boot集成Spring Security之实现原理
Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterCha…...

基于深度学习的点云处理模型PointNet++学习记录
前面我们已经学习了Open3D,并掌握了其相关应用,但我们也发现对于一些点云分割任务,我们采用聚类等方法的效果似乎并不理想,这时,我们可以想到在深度学习领域是否有相关的算法呢,今天,我们便来学…...

Javascript Object.assgin()详解以及深浅拷贝
Object.assign() 方法是 JavaScript 中用于将所有可枚举属性的值从一个或多个源对象复制到目标对象的方法。它将返回目标对象。这是一种浅拷贝,也就是说,如果源对象中的属性是一个对象或数组,那么这个属性的引用将被复制,而不是对…...

Redis篇(应用案例 - UV统计)(持续更新迭代)
目录 一、HyperLogLog 二、测试百万数据的统计 一、HyperLogLog 首先我们搞懂两个概念: UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。 1天内同一个用户多次访问该网站,只记录…...

解锁微信小程序新技能:ECharts动态折线图搭配WebSocket,数据刷新快人一步!
在微信小程序中,数据可视化展示越来越受到开发者的重视。本文将为您介绍如何在微信小程序中使用ECharts绘制折线图,并通过WebSocket实现实时更新图表数据。 一、准备工作 创建微信小程序项目 首先,我们需要创建一个微信小程序项目。如果您已…...

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X
一、上交所宕机事件始末 2024 年 9 月 27 日,上交所交易系统突发崩溃,这一事件犹如一颗巨石投入平静的湖面,引起了轩然大波。当天上午,众多投资者反馈券商交易出现延迟问题,随后上交所发布了《关于股票竞价交易出现异常…...

P4、P4D、HelixSwarm 各种技术问题咨询
多年大型项目P4仓库运维经验,为你解决各种部署以及标准工业化流程问题。 Perforce 官网SDPHelixCore GuideHelixSwarm GuideHelixSwarm Download...

Linux 应用层协议HTTP
文章目录 一、初始HTTP协议二、URL格式网络中怎么通过URL进行定位资源呢?编码和解码 三、HTTP的请求格式和响应格式HTTP的请求格式HTTP的响应格式HTTP的请求方法GET方法POST方法GET Vs PostHTTP的封装和分用文件流操作浏览器获得一个完整的网页流程 HTTP的状态码对3…...

Python和C++混淆矩阵地理学医学物理学视觉语言模型和算法模型评估工具
🎯要点 优化损失函数评估指标海岸线检测算法评估遥感视觉表征和文本增强乳腺癌预测模型算法液体中闪烁光和切伦科夫光分离多标签分类任务性能评估有向无环图、多路径标记和非强制叶节点预测二元分类评估特征归因可信性评估马修斯相关系数对比其他准确度 Python桑…...

HTTP 协议的基本格式和 fiddler 的用法
HTTP协议格式 HTTP是⼀个⽂本格式的协议.可以通过Chrome开发者⼯具或者Fiddler抓包,分析HTTP请求/响应的细节. 抓包工具的使用 以Fiddler为例. • 左侧窗⼝显⽰了所有的HTTP请求/响应,可以选中某个请求查看详情. • 右侧上⽅显⽰了HTTP请求的报⽂内容.(切换到Raw标签⻚可以看…...

【计算机网络】详解UDP协议格式特点缓冲区
一、UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度;如果16位UDP检验和出错,报文会被直接丢弃。 1.1、检验和出错的几种常见情况 数据传输过程中的比特翻转:在数据传输过程中,由于物理介质或网络设…...

网络安全cybersecurity的几个新领域
一、电力安全 同学们,今天我们来讨论一下为什么网络安全(Cybersecurity)和电力系统(Power Systems)这两个看似不同的领域会有交集。其实,这两个领域之间的联系非常紧密。以下我将从多个角度进行解释&#…...

android 原生加载pdf
implementation("androidx.pdf:pdf-viewer-fragment:1.0.0-alpha02") pdf加载链接...

MAE(平均绝对误差)和std(标准差)计算中需要注意的问题
一、MAE(平均绝对误差) 计算公式: yi 是第i个实际值y^i 是第i个预测值 计算方法: MAE就是求实际值与预测值之间的误差,需要给出预测值和原始的实际值 二、std(标准差) 计算公式&#x…...

03实战篇:把握667分析题的阅读材料、题目
本节你将学习到: 如何快速识别阅读材料的有效信息如何把握题目的作答方向 在正式进入具体的实战之前,我想先来讲一讲如何利用给定阅读材料、如何分析题目来确保不偏题等基础性知识。 高效利用给定阅读材料的方法 根据博主的实战经验来看,阅…...

C++系列-多态
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 多态 多态就是不同类型的对象,去做同一个行为,但是产生的结果是不同的。 比如说: 都是动物叫声,猫是喵喵,狗是汪汪&am…...

基于C++和Python的进程线程CPU使用率监控工具
文章目录 0. 概述1. 数据可视化示例2. 设计思路2.1 系统架构2.2 设计优势 3. 流程图3.1 C录制程序3.2 Python解析脚本 4. 数据结构说明4.1 CpuUsageData 结构体 5. C录制代码解析5.1 主要模块5.2 关键函数5.2.1 CpuUsageMonitor::Run()5.2.2 CpuUsageMonitor::ComputeCpuUsage(…...

fish-speech语音大模型本地部署
文章目录 fish-speech模型下载编译部署 小结 fish-speech模型 先说下fish-speech模型吧,可以先看下官网。如下: 这就是一个模型,可以根据一个样例声音,构建出自己需要的声音。其实,这个还是有很多用途的;…...

如何写出更牛的验证激励
前言 芯片验证是为了发现芯片中的错误而执行的过程,它是一个破坏性的过程。完备的验证激励可以更有效地发现芯片错误,进而缩短验证周期。合格的验证激励必须能产生所有可能的验证场景(完备性),包括合法和非法的场景,并保持最大的…...

EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系
随着科技的飞速发展,视频监控技术已成为现代社会安全、企业管理、智慧城市构建等领域不可或缺的一部分。EasyCVR视频汇聚平台作为一款高性能的视频综合管理平台,凭借其强大的视频处理、汇聚与融合能力,在构建智慧安防/视频监控系统中展现出了…...

面对大文件(300G以上)如何加速上传速度
解题思路 采用分片上传,同时每个分片多线程上传可以加速上传速度,上传速度提升10倍左右 在阿里云OSS Go SDK中,bucket.UploadStream 函数并没有直接提供,而是通过 bucket.UploadFile 或者 bucket.PutObject 等函数来实现文件上传…...

基于 Redis 实现消息队列的深入解析
目录 Redis 消息队列简介Redis 消息队列的实现方式 2.1 使用 List 实现简单队列2.2 使用 Pub/Sub 模式实现消息发布与订阅2.3 使用 Stream 实现高级队列 Redis 消息队列的特点与优势Redis 消息队列的应用场景Redis 消息队列的局限性及应对方案总结 Redis 消息队列简介 Redis…...