挖矿
问题描述小蓝正在数轴上挖矿,数轴上一共有 $n$ 个矿洞,第 $i$ 个矿洞的坐标为 $a_i$。小蓝从 $0$ 出发,每次可以向左或向右移动 $1$ 的距离。当路过一个矿洞时,就会进行挖矿作业,获得 $1$ 单位矿石。但一个矿洞不能被多次挖掘。小蓝想知道在移动距离不超过 $m$ 的前提下,最多能获得多少单位矿石? 输入格式输入的第一行包含两个正整数 $n, m$,用一个空格分隔。第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$,相邻整数之间使用一个空格分隔。 输出格式输出一行包含一个整数表示答案。 样例输入Plaintext5 40 -3 -1 1 2 样例输出Plaintext4 样例说明路径:$0 \to -1 \to 0 \to 1 \to 2$,可以对 $0, -1, 1, 2$ 四个矿洞挖掘并获得最多 $4$ 块矿石。_(注:距离计算为 $0 \to -1$ (1) $\to 0$ (1) $\to 1$ (1) $\to 2$ (1),总距离 4,不超过 $m=4$)_ 评测用例规模与约定对于 $20\%$ 的评测用例,$1 \le n \...
抓娃娃
题目名称:抓娃娃【问题描述】小明拿了 $n$ 条线段练习抓娃娃。他将所有线段铺在数轴上,第 $i$ 条线段的左端点在 $l_i$,右端点在 $r_i$。小明用 $m$ 个区间去框这些线段,第 $i$ 个区间的范围是 $[L_i, R_i]$。如果一个线段有 至少一半 的长度被包含在某个区间内,则将其视为被这个区间框住。请计算出每个区间框住了多少个线段?【输入格式】输入共 $n+m+1$ 行。第一行为两个正整数 $n, m$。后面 $n$ 行,每行两个整数 $l_i, r_i$。后面 $m$ 行,每行两个整数 $L_i, R_i$。【输出格式】输出共 $m$ 行,每行一个整数。【样例输入】Plaintext3 21 21 33 41 42 4【样例输出】Plaintext32 【评测用例规模与约定】对于 $20\%$ 的数据,保证 $n, m \le 10^3$。对于 $100\%$ 的数据,保证 $n, m \le 10^5$, $l_i < r_i$,$0 < l_i, r_i, L_i, R_i \le 10^6$,$\max{r_i - l_i} \le \mi...
🚀 本站博客搭建与美化技术文档
🚀 本站博客搭建与美化技术文档1. 前言本站基于 Hexo 静态博客框架搭建,使用了功能强大的 Butterfly 主题。本文档记录了从零开始搭建、配置主题以及进行个性化美化的完整过程,既是对自己折腾过程的记录,也希望能帮助到想搭建类似博客的朋友。 2. 技术栈概览 核心框架: Hexo (快速、简洁且高效的博客框架) 博客主题: Butterfly (一款美观且功能丰富的 Hexo 主题) 托管平台: GitHub Pages (免费、稳定的静态网页托管) 评论系统: Giscus (基于 GitHub Discussions 的评论系统) 统计工具: 不蒜子 (Busuanzi) 3. 基础环境搭建参考教程:【Hexo搭建】免费快速搭建Hexo博客网站并部署上线 我的搭建流程主要分为以下几步: 环境准备: 安装 Node.js 和 Git,这是 Hexo 运行的基础。 初始化博客: 使用 npm install -g hexo-cli 安装脚手架,并通过 hexo init 生成博客目录。 部署设置: 在 GitHub 创建仓库(用户名.github.io...
接雨水
题目描述给定 $n$ 个非负整数表示每个柱子的高度,每个柱子的宽度为 1,计算按此排列的柱子,下雨之后能接多少雨水。输入格式 第一行包含一个整数 $n$,表示柱子的数量。 接下来的 $n$ 行(或一行内),每行一个非负整数,表示每个位置柱子的高度 $height[i]$。输出格式 输出一个整数,表示能够接住的雨水总量。 对于每一个单位的我们只需要找到它左边的最大值和右边的最大值,取二者的最小值,再减去这个单位的柱子长度。用前缀最大值数组存储左边最大值,后缀最大值数组存储右边最大值#include<iostream>using namespace std;int main(){ int n,sum=0; cin>>n; int arr[n+1]; for(int i=1;i<=n;i++) cin>>arr[i]; int left_max[n+1]; int right_max[n+1]; for(int i=1;i<=n;i++) { if...
领地选择
作为在虚拟世界里统帅千军万马的领袖,小 Z 认为天时、地利、人和三者是缺一不可的。所以,谨慎地选择首都的位置对于小 Z 来说是非常重要的。首都都被认为是一个占地 $C \times C$ 的正方形。小 Z 希望你找到一个合适的位置,使得首都所占领的位置的土地价值总和最高。 输入格式 第一行三个整数 $N, M, C$,表示地图的宽和长以及首都的边长。 接下来 $N$ 行每行 $M$ 个整数,表示地图上每个地块的价值。价值可能为负数。输出格式 一行两个整数 $X, Y$,表示首都左上角的坐标。输入输出样例 输入 #1: Plaintext 3 4 21 2 3 1-1 9 0 22 0 1 1 输出 #1: Plaintext 1 2 二维前缀和#include<iostream>using namespace std;int main(){ int N,M,C,X,Y,MAXVAULE=0; cin>>N>>M>>C; int arr[N+1][M+1]; for(int i=0;i&l...
光骓者的荣耀
小 K 打下的江山一共有 $n$ 个城市,城市 $i$ 和城市 $i+1$ 有一条双向高速公路连接,走这条路要耗费时间 $a_i$。小 K 为了关心人民生活,决定定期进行走访。他每一次会从 $1$ 号城市到 $n$ 号城市并在经过的城市进行访问。其中终点必须为城市 $n$。不仅如此,他还有一个传送器,传送半径为 $k$,也就是说可以传送到 $i-k$ 和 $i+k$。如果目标城市编号小于 $1$ 则为 $1$,大于 $n$ 则为 $n$。但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快地完成访问,于是就想问交通部部长您最快的时间是多少。注意: 他可以不访问所有的城市,使用传送器不耗费时间。 输入格式 两行:第一行包含两个整数 $n, k$。 第二行:包含 $n-1$ 个整数,第 $i$ 个整数表示 $a_i$(即城市 $i$ 到 $i+1$ 之间的耗时)。 输出格式 输出一个整数,表示从 $1$ 号城市到 $n$ 号城市的最短时间。 我们想要尽可能的少走,传送的距离尽可能的多用一个数组存储相邻两个城市之间的距离然后计算这个数组的前缀和,计算arr[i+k...
弹珠堆放
小蓝有 20230610 颗弹珠,想摆成一个金字塔。高度 1:1 颗高度 2:4 颗高度 3:10 颗高度 4:20 颗问:手里的弹珠最多能摆多高? !12观察可知,从上往下,每层数量是以1为首项,公差为以2为首项1为公差的等差数列的等差数列枚举每层数量相加即可#include <iostream>#include <cmath>using namespace std;int main(){ int sum=0; int pre=1; int high=0; while(sum<=20230610){ sum+=pre; high+=1; pre=pre+high+1; } cout<&l...
前缀和
这是求一个一维数组的前缀和如果我们要计算4-9这个区间的和我们就可以用prefix[9]-prefix[3]得到vector<int>prefix(n)for(int i=0;i<n;i++){ if(i)prefix[i]=prefix[i-1]; prefix[i]+=arr[i];} 异或的性质 : 核心定义:相同为 0,不同为 1(从位的角度) 任何数和 0 异或,结果还是它自己 A ^(B^C)=(A^B)^ C 自己异或自己 = 0 A=B ^ C,两边^ C,A^ C=B求前缀异或vector<int>prefix(n)prefix[0]=arr[0]for(int i=1;i<n;i++){ prefix[i]^=prefix[i-1];} 如果我们要计算4-9这个区间的异或我们就可以用prefix[9]^ prefix[3] 二维前缀和(在二维矩阵中求任意子矩阵的和)比如12就代表的是左上角2 * 2区域的和
好数
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 · · · )上的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数,我们就称之为“好数”。给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。 我的思路就是利用while(x){ int dight = x % 10; // do something x /=10;}取它的每一位判断,但我怎么可以确定每一位是对应奇数位还是偶数位了?我无法确定,于是我就想到一种简单粗暴的方式,把从低位到高位的每一位取出来然后存放在数组中,用两个循环分别遍历数组的奇数位和偶数位,判断每一位是不是符合要求。于是就有了下面的代码。#include<iostream>#include<vector>using namespace std;bool IsHaoShu(int N){ vector<int> arr1; int n; while(N){ n=N%10; arr1.push_back(n); N/=10;...
枚举算法入门
在某个可能的解的集合中,按某个顺序依次检索元素,用题目给定的条件进行校验和计算。是否存在,找到第一个,全部都,全部都不。 原数组中是否存在子数组?(元素无需连续,但需保持相对顺序一致)templata<typename T>bool subMatch(const T&arr,const T&target){ size_t idx=0; for (auto &elem : arr) { if(elem==target[idx]) { if(++idx == target.size()) return true; } } return false;} 寻找第K小的素数?for(int idx=1;;idx++){ if(isPrime(idx)) cnt++; if(cnt==k) { cout<<idx; break; }} 枚举的优化:裁剪枚举集判断一个数是否...
