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

[每日随题14] 递推 - 滑动窗口 - 数学

整体概述

  • 难度:900 →\rightarrow 1400 →\rightarrow 2000

P10250 [GESP样题 六级] 下楼梯

  • 标签:递推

  • 前置知识:无

  • 难度:橙 900

题目描述:

image

输入格式:

image

image

输出格式:

image

样例输入:

4
10

样例输出:

7
274

解题思路:

  • 简单的水题,dpi=dpi−1+dpi−2+dpi−3dp_i = dp_{i-1}+dp_{i-2}+dp_{i-3}dpi=dpi1+dpi2+dpi3dp1=1dp_1=1dp1=1dp2=2dp_2=2dp2=2dp3=4dp_3=4dp3=4

  • 从小到大推一遍即可,复杂度 O(n)O(n)O(n)

完整代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 65;
int dp[N];
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);dp[1] = 1,dp[2] = 2,dp[3] = 4;int n; cin >> n;for(int i=4;i<=n;i++) dp[i] = dp[i-1]+dp[i-2]+dp[i-3];cout << dp[n];return 0;
}

P8551 Bassline

  • 标签:滑动窗口

  • 前置知识:STL-priority_queue

  • 难度:黄 1500

题目描述:

image

输入格式:

image

image

输出格式:

image

样例输入:

4
1 3
4 7
5 9
7 10

样例输出:

2

解题思路:

  • 题目要求找到某个区间 [x,y][x,y][x,y] 满足对于所有区间,要么包含 [x,y][x,y][x,y] 要么与 [x,y][x,y][x,y] 不相交,此时贡献为 包含[x,y]的区间个数∗(y−x)包含 [x,y] 的区间个数 * (y-x)包含[x,y]的区间个数(yx)

  • 我们发现 l,rl,rlr 的范围很小,那么我们可以暴力枚举 xxx,求对于每个 xxx 的最大 yyy 是多少。

  • 那么会限制 yyy 的只有左端点包含了 xxx 的区间的右端点,以及左端点小于 yyy 的区间左端点。那么我们先将区间按 lll 从小到大排序,在枚举 xxx 的过程中将大于 iii 的区间的右端点丢进优先队列中,对于前者可以快速从优先队列找到最小的 rrr,对于后者可以在排过序的区间左端点里二分,直接得到大于 iii 的最小区间左端点。

  • 至此问题解决,总复杂度 O(n⋅log2n)O(n·log_2n)O(nlog2n)

完整代码

#include<bits/stdc++.h>
#define int long long
#define Size(x) ((int)(x).size())
using namespace std;
const int N = 3e5+5, INF = 0x3f3f3f3f;
int n,m; bool out[N];
struct Node{int l,r;}a[N];
priority_queue<int,vector<int>,greater<int>> qu;
inline int up_min(int x){int l = 1,r = n,mid;while(l<=r){mid = (l+r)>>1;if(a[mid].l > x) r = mid-1;else l = mid+1;}return l == n+1 ? INF : a[l].l;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin >> n;for(int i=1;i<=n;i++) cin >> a[i].l >> a[i].r, m = max(m,a[i].r);sort(a+1,a+n+1,[&](Node x,Node y){return x.l < y.l;});int p = 1, res = 0;for(int i=1;i<=m;i++){while(p<=n && a[p].l == i) qu.push(a[p++].r);while(!qu.empty() && qu.top() < i) qu.pop();if(!qu.empty()){int r = min(up_min(i)-1,qu.top());res = max(res,Size(qu)*(r-i));}  }cout << res;return 0;
}

P2424 约数和

  • 标签:数学

  • 前置知识:无

  • 难度:蓝 2000

题目描述:

image

image

输入格式:

image

image

输出格式:

image

样例输入:

2 4
123 321

样例输出:

14
72543

解题思路:

  • 首先我们考虑如何快速求 ∑i=1nf(n)\sum_{i=1}^{n} f(n)i=1nf(n),考虑贡献法。

  • 我们可以枚举 [1,n][1,n][1,n] 的每个数字,判断有其有多少个倍数,即该数字作为约数贡献了多少次,那么 ∑i=1nf(n)=∑i=1n⌊ni⌋∗i\sum_{i=1}^{n}f(n) = \sum_{i=1}^{n}\lfloor\frac n i\rfloor * ii=1nf(n)=i=1nini

  • 可是这样复杂度为 O(n)O(n)O(n),而 nnn 高达 2×1092\times 10^92×109,还需要优化。

  • 我们随便选个 n=12n=12n=12 来观察序列 ⌊ni⌋\lfloor \frac n i\rfloorin 有什么性质:12,6,4,3,2,2,1,1,1,1,1,112,6,4,3,2,2,1,1,1,1,1,112,6,4,3,2,2,1,1,1,1,1,1

    发现其中有明显的连续重复项,考虑这是如何产生的,重复项的区间 [l,r][l,r][l,r] 被如何确定。

  • 序列 ⌊nl⌋\lfloor \frac n l\rfloorln 代表着约数 lll 的出现次数,那么使得 ⌊nx⌋=⌊nl⌋\lfloor \frac n x\rfloor = \lfloor \frac n l\rfloorxn=ln 的最大 xxx 即为 ⌊n⌊nl⌋⌋\lfloor \frac n {\lfloor \frac n l\rfloor}\rfloorlnn,所以我们可以加快枚举约数的过程,将所有约数个数相同的约数的贡献一并计算。

  • 复杂度与 O(n)O(\sqrt n)O(n) 同阶。

完整代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int sum(int n){int res = 0,l,r;for(l=1;l<=n;l=r+1){	// l 为约数int cnt = n/l;		// cnt 为约数 l 出现的个数r = n/cnt;		// r 表示最大的 (约数个数为cnt) 的约数res += cnt * ((l+r)*(r-l+1)/2);	// 此时 [l,r] 范围内的约束均有 cnt 个,等差数列求和}return res;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int x,y; cin >> x >> y;cout << sum(y) - sum(x-1);return 0;
}

http://www.dtcms.com/a/289768.html

相关文章:

  • JavaScript 中Object、Array 和 String的常用方法
  • java抗疫物质管理系统设计和实现
  • 【超分辨率专题】OSEDiff:针对Real-World ISR的单步Diffusion
  • [FDBUS 4.2]fdbus消息发送失败后的流程处理
  • SigLIP和SigLIP2
  • 题单【循环结构】
  • maven构建Could not transfer artifact失败原因
  • 系统思考:整体论
  • 【成品设计】基于STM32的家庭用水检测系统设计
  • 2025《艾诺提亚失落之歌》新手攻略
  • 看板中如何处理跨职能任务协作?
  • 大模型词表设计与作用解析
  • Autosar RTE实现观测量生成-基于ETAS软件
  • [Python] -项目实践2- 用Python快速抓取网页内容(爬虫入门)
  • python网络爬虫小项目(爬取评论)超级简单
  • 阶段1--Linux中的计划任务
  • 调试Claude code的正确姿势
  • 类型混淆、越界写入漏洞
  • 基于单片机出租车计价器设计
  • 重塑优化建模与算法设计:2024上半年大模型(LLM)在优化领域的应用盘点
  • Java入门-【3】变量、字符串、条件、循环、数组的简单总结
  • python 字典中取值
  • SQL189 牛客直播各科目同时在线人数
  • MySQL事物相关
  • Logback简单使用
  • 什么是SEO关键词优化的实战提升指南?
  • 如何系统化掌握角色设计与提示工程的深度整合
  • 基于Event Sourcing和CQRS的微服务架构设计与实战
  • 第十四届全国大学生数学竞赛初赛试题(非数学专业类)
  • 零基础入门 AI 运维:Linux 部署全栈项目实战(MySQL+Nginx + 私有化大模型)