【CF1558B】Up the Strip
时间:2021-08-25
本文章向大家介绍【CF1558B】Up the Strip,主要包括【CF1558B】Up the Strip使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目
题目链接:https://codeforces.com/problemset/problem/1558/B
你有一个正整数 \(n\),当 \(n>1\) 时,可以选择以下两种操作:
- 选择一个在 \([1,n)\) 范围内的整数 \(x\),让 \(n\) 减去 \(x\)。
- 选择一个在 \([2,n]\) 范围内的整数 \(x\),让 \(n\) 除以 \(x\) 并下取整。
求有多少种方案使得 \(n\) 变为 \(1\)。答案对 \(m\) 取模。
\(n\leq 4\times 10^6\),\(m\) 是质数。(simplified version:\(n\leq 2\times 10^5\))。
时限 6s。
思路
设 \(f[i]\) 表示变到 \(i\) 的方案数。simplified version 的话由于 \(\lfloor\frac{i}{j}\rfloor\) 只有 \(O(\sqrt{i})\) 种取值,直接整除分块就可以了。时间复杂度 \(O(n\sqrt n)\)。
而这道题的话就不考虑刷表,考虑如何转移到 \(f[i]\)。如果一个数除以 \(j\) 后下去整等于 \(i\),那么这个数的范围显然是 \([ij,(i+1)j-1]\)。那么直接枚举 \(j\),记一下后缀和即可。
时间复杂度 \(O(\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor)=O(n\log n)\)。
代码
/*
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
*/
#include <bits/stdc++.h>
#define YES printf("YES\n")
#define Yes printf("Yes\n")
#define NO printf("NO\n")
#define No printf("No\n")
#define pb push_back
#define mp make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int N=4000010;
int Q,n,MOD,f[N],g[N];
int main()
{
//cerr<<(sizeof(f)+sizeof(g))/1024/1024<<"\n\n";
scanf("%d%d",&n,&MOD);
f[n]=g[n]=1;
for (int i=n-1;i>=1;i--)
{
f[i]=g[i+1];
for (int j=2;i*j<=n;j++)
{
int l=i*j,r=min(n,(i+1)*j-1);
if (l>r) continue;
f[i]=((f[i]+g[l])%MOD-g[r+1])%MOD;
}
g[i]=(g[i+1]+f[i])%MOD;
}
cout<<(f[1]%MOD+MOD)%MOD;
return 0;
}
原文地址:https://www.cnblogs.com/stoorz/p/15186302.html
- Spark1.0新特性-->Spark SQL
- 挖洞经验 | 看我如何综合利用4个漏洞实现GitHub Enterprise 远程代码执行
- Spark的机器学习算法mlib的例子运行
- Spark Streaming自定义Receivers
- 利用USB橡皮鸭在目标机器上启动Empire或Meterpreter会话
- Spark部署
- Spark调优
- perl语言十分钟入门【零基础可入】
- Spark硬件配置推荐
- Spark作业调度
- 如何把Photoshop改造成远程控制工具(RAT)来利用
- Office高级威胁漏洞在野利用分析
- 10行代码告诉你,为什么说Python数据可视化是一件艺术品
- 没想到你是这样的Linux | 终端下有趣的命令合集
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis6之pub/sub发布与订阅(对比List和Kafka)
- SpringBoot原理?属性配置?在这里
- 【LeeCode 中等 矩阵】面试题 01.07. 旋转矩阵
- pytest文档44-allure.dynamic动态生成用例标题
- Java自动化测试(TestNg参数化 11)
- 宋宝华:论Linux的页迁移(Page Migration)上集
- 火遍全网的自热火锅哪款最好吃?我们用Python告诉你!
- 剑指offer第10题:矩阵中的路径
- 同事牛逼啊,写了个隐藏 bug,我排查了 3 天才解决问题!
- 使用PyTorch的TensorBoard-可视化深度学习指标 | PyTorch系列(二十五)
- 技术分享 | 只有.frm和.ibd文件时如何批量恢复InnoDB的表
- 14个 JavaScript 代码优化技巧
- 你写注释吗?写你就输了
- 跨端框架模板解析引擎了解一下
- 【Java】基础04:Java虚拟机