OI 笑传 #17

news/2025/10/10 17:32:18/文章来源:https://www.cnblogs.com/hm2nsite/p/19133522

1

找到 \(1\sim n\) 中,因数最多的那一个数,如有多个,输出最小的那一个。\(1\le n \le 10^{18}\)

挺有意思的小思维。

首先我们有关于一个正整数 \(n\) 因数的一些定理:

\[n = p_1^{a_1} \times p_2^{a_2} \times \dots \times p_k^{a_k} \]

\(n\)唯一素因数分解式(其中 \(p_i\) 是互不相同的质数,\(a_i \ge 1\))。

\(n\) 的正因数个数为:

\[d(n) = (a_1 + 1)(a_2 + 1) \dots (a_k + 1) \]

\(n\) 的所有正因数之和为:

\[\sigma(n) = \prod_{i=1}^{k} \frac{p_i^{a_i + 1} - 1}{p_i - 1} \]

我们用到第一个式子。

首先根据一个 \(n\) 去确定对应的答案是不好做的。我们尝试定住答案之后构造最小的 \(n\) 使其满足 \(d(n)=ans\)

有一个观察是 \(ans \le 10^6\),这个应该是显然的。

构造的方法就是枚举 \(ans\) 的所有分解方法,这样就可以对应到每一个 \(a_i\),就可以求出 对应的 \(n\)。然后这好像还是很难办。

于是能不能直接构造对应最小的 \(n\) 使其满足 \(d(n)=ans\)

继续观察,因为因数和式子的形式,里面每一种质因数都是平等的,也就是只与这个质因数的指数有关系。

于是我猜所有最小的 \(n\) 拥有的质因数的最大值一定不会太大,不然当然可以换成一个更小的,因为每一种质因数都是平等的。

不会太大到哪里去?我们从 \(2\) 开始乘质数,你会发现最多乘到 \(57\) 就过 \(10^{18}\) 了。

于是我们只需要 \(2\sim 57\) 这些质数去构造 \(n\) 就行了。

怎么构造?搜索。

而且还有个观察,我们用 \(2\sim 57\) 这些数的次数是单调不升的,还是因为每一种质因数都是平等的,且我们还要让 \(n\) 最小。

于是加上这个剪枝,试了下发现跑得飞快。

把搜出来的最小的 \(n\) 及其答案存到数组里,再做一遍前缀最大值,查询的时候二分即可。

code

Show me the code
#define psb push_back
#define mkp make_pair
#define ls p<<1
#define rs (p<<1)+1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#define rd read()
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
int s[1000]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59};
int cnt=0;
int setl[100];
const __int128 lm=1e18;
vector<pair<ll,int> > pans;
void dfs(int p,__int128 ct,ll res){if(p>17)return ;while(setl[p]+1<=setl[p-1]&&ct*s[p]<=lm){if(setl[p]!=0)res/=setl[p];setl[p]++;res*=setl[p];ct*=s[p];pans.push_back(mkp(ct,res));dfs(p+1,ct,res);}setl[p]=1;return ;
}
vector<pair<ll,int> > pr;
int main(){setl[0]=114514;for(int i=1;i<=19;i++)setl[i]=1;dfs(1,1,1);sort(pans.begin(),pans.end());int qmax=1;pr.push_back(mkp(1,1));for(int i=0;i<pans.size();i++){if(pans[i].second>qmax){pr.push_back(mkp(pans[i].first,pans[i].second));qmax=max(qmax,pans[i].second);}}int T;cin>>T;while(T--){ll rr;cin>>rr;int p=lower_bound(pr.begin(),pr.end(),mkp(rr,0))-pr.begin();if(pr[p].first==rr){cout<<pr[p].first<<' '<<pr[p].second<<'\n';}elsecout<<pr[p-1].first<<' '<<pr[p-1].second<<'\n';		}return 0;
}

2

\(n\) 个作业,每个作业 \(i\) 有两个整数属性:

  • 难度 \(a_i\)
  • 限制值 \(b_i\)

定义一个作业执行顺序为排列:

\[S = (s_1, s_2, \dots, s_n) \]

该排列是有效的,若同时满足以下两个条件:

1️⃣ 难度非递减:

\[a_{s_1} \le a_{s_2} \le \dots \le a_{s_n} \]

2️⃣ 邻近限制:
对于任意相邻作业 \((s_i, s_{i+1})\),定义:

\[C(i, i+1) = |\{k \mid s_k \in \{s_1, \dots, s_i\}, \; \min(a_{s_i}, a_{s_{i+1}}) \le a_{s_k} \le \max(a_{s_i}, a_{s_{i+1}})\}| \]

要求:

\[C(i, i+1) - 1 \le b_{s_i} \]

求所有满足条件的作业顺序数量,对 \(4921057\) 取模。

Input

  • 第一行:整数 \(n\)
  • 第二行:\(n\) 个整数 \(a_1, a_2, \dots, a_n\)
  • 第三行:\(n\) 个整数 \(b_1, b_2, \dots, b_n\)

Output

输出一个整数,为方案总数模 \(4921057\)

Constraints

\[1 \le n \le 18 \]

\[0 \le a_i, b_i \le 10^9 \]

简单状压。马力即可。

用了 __builtin_popcount() 算二进制 \(1\) 的数量。

code

Show me the code
#define psb push_back
#define mkp make_pair
#define ls p<<1
#define rs (p<<1)+1
#define rep(i,a,b) for( int i=(a); i<=(b); ++i)
#define per(i,a,b) for( int i=(a); i>=(b); --i)
#define rd read()
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read(){ll x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
const int mod=4921057;
const int N=(1<<19);
const int M=20;
int dp[N][20];
int a[M],b[M];
vector<int> st[M];
int main(){int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];for(int j=0;j<n;j++)cin>>b[j];for(int i=0;i<(1<<n);i++){int cnt=__builtin_popcount(i);st[cnt].push_back(i);if(cnt==1){for(int j=0;j<n;j++){if((i>>j)&1)dp[i][j]=1;}}}for(int i=2;i<=n;i++){for(int s:st[i]){vector<int> p;int cnt[30];p.clear();memset(cnt,0,sizeof cnt);for(int j=0;j<n;j++){if((s>>j)&1)p.push_back(j);else{cnt[j+1]=1;}cnt[j+1]=cnt[j+1]+cnt[j];	}for(int u:p){for(int v:p){if(u==v||dp[s^(1<<v)][u]==0)continue;if(a[v]<a[u])continue;if(u<v){if(cnt[v+1]-cnt[u]>b[v])continue;}if(u>v){if(cnt[u+1]-cnt[v]>b[v])continue;}dp[s][v]=(dp[s^(1<<v)][u]+dp[s][v])%mod;}}}}int ans=0;for(int i=0;i<n;i++){if(dp[(1<<n)-1][i]!=0)ans+=dp[(1<<n)-1][i];ans=ans%mod;}cout<<ans;return 0;
}

想起来去年 CSPS 上整的活了,今年还想整活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 最新屏蔽泵厂家推荐排行榜揭晓!实力企业深度解析与选购指南,助企业精准选型

在石油化工、新能源、制药等关键工业领域,屏蔽泵作为无泄漏流体输送的核心设备,直接关系到生产安全与效率。当前市场中,既有技术成熟的老牌企业,也涌现出诸多主打创新的新锐品牌,但同时存在产品性能参差不齐、适配…

深入解析:OpenLayers地图交互 -- 章节十二:键盘平移交互详解

深入解析:OpenLayers地图交互 -- 章节十二:键盘平移交互详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

实用指南:Python Tkinter构建交互式精灵表切割桌面应用程序:将精灵表分割成单个帧的功能

实用指南:Python Tkinter构建交互式精灵表切割桌面应用程序:将精灵表分割成单个帧的功能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

题解:qoj7979 棋盘

为数不多自己能乱搞出来的构造题。 题意:现有一个平面,在 \((1,1)\) 处有一个棋子。棋盘上有若干处被标记,\((1,1)\) 处必须被标记,记 \(f_{i,j}\) 为棋子到达 \((i,j)\) 且只能经过被标记的点的方案数。 现在要求…

2025 最新不锈钢管厂家推荐排行榜 权威发布:304/316L/2205 等材质焊管无缝管优质企业精选

不锈钢管作为石油、医药、航天等关键领域的 “工业血管”,其品质直接关系到工程安全与产业效率。当前市场中,产品质量两极分化问题突出,部分管材存在耐腐蚀性不足、精度偏差大等隐患,而新兴品牌的快速崛起又让选购…

(JDK,Eclipse,Tomcat版本)Java的web配备Part1 (#by 拌面

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年最新推荐微波干燥设备生产厂家排行榜,覆盖多行业高效干燥解决方案权威推荐黄粉虫/黑水虻/中药材/茶叶微波干燥设备厂家推荐

当前,微波干燥设备凭借高效、节能、环保的核心优势,已深度融入食品加工、中药材处理、化工制造、农产品加工等多个关键行业,成为企业提升生产效率、保障产品品质的重要装备。但随着市场需求激增,大量厂家涌入导致行…

2025 年高强钢板厂家最新推荐排行榜:聚焦国内优质企业,助力采购者精准选品的权威榜单合金/HG785D/Q690D/S960QL/700L高强钢板厂家推荐

当前,高强钢板在矿山、冶金、电力、汽车制造等多个关键行业的应用愈发广泛,其质量与性能直接关系到设备的运行效率、使用寿命及生产安全。随着下游行业对高强钢板的耐磨、耐蚀、高强度等性能要求不断提高,市场需求持…

(数论大杂烩)古代猪文

HZOJ 洛谷 写在前面 挺久没写过单独的题解了,然后遇到这道做法挺神奇的题,就是那种让人眼前一亮的方法,遂打算写写。 题意 给出两个数\(n, g\),求问 \[g^{\sum_{x|n}~\binom{n}{x}}~mod~P~~(P=999911659) \]的值。…

滥用ACL权限覆盖其他用户S3存储桶中的文件/视频

本文详细介绍了如何通过滥用AWS S3存储桶的ACL权限配置漏洞,实现覆盖其他用户上传的文件和视频。文章包含完整的HTTP请求示例和攻击步骤,展示了从策略生成到文件覆盖的完整攻击链。滥用ACL权限覆盖其他用户上传的文件…

2025 年最新三维扫描仪厂家权威排行榜:聚焦高精度与多场景适配,为企业与个人用户精选优质品牌推荐高精度/专业/手持激光/工业/便携式三维扫描仪厂家推荐

随着 3D 数字化技术在文博、医疗、工业、建筑等领域的深度渗透,三维扫描仪已成为实现高精度数据采集的核心设备。但当前市场中,厂家数量繁杂且产品质量差距悬殊,部分产品存在精度不足、稳定性差、适配场景有限等问题…

后端基础-输入/输出件

Innovus: 输入件:1. Gate level netlist (.v) 2. SDC (.sdc) 3.Logical libraries (.lib) 4. Technology file (.tlef/.tf) 5.Physical libraries (.lef) 6. RC Coefficient file (.qrc/.captable) 输出件:1. lef 2…

2025 年净化工程服务商最新权威推荐排行榜:医院净化工程 / 制药厂 / 化工厂 / 实验室 / 无尘车间优选净化工程设计安装施工公司

2025 年,医疗、制药、电子等领域对洁净环境的标准持续升级,净化工程成为保障安全合规与产品质量的核心环节。但市场中服务商资质参差不齐,部分企业因技术滞后无法满足个性化需求,或用劣质材料导致净化效果不达标,…

“100 W、18 GHz 一口通吃——HL-SMAMF-100-18-20 衰减器小砖块实测记”

“100 W、18 GHz 一口通吃——HL-SMAMF-100-18-20 衰减器小砖块实测记”HL-SMAMF-100-18-20 这块看起来毫不起眼的“小砖块”,却是我最近半年功率实验里最顺手的一件工具。第一次把它拿在手里,黄铜镀镍外壳加黑色氧化…

2025 年最新推荐!国内优质充电桩厂家排行榜,涵盖多场景适配产品,助用户精准选靠谱品牌智能/新能源/电动车/重卡/电动车直流充电桩厂家推荐

当前新能源汽车保有量持续攀升,充电桩作为关键配套设施,市场需求日益旺盛,但行业乱象却让用户选购困难重重。部分产品充电效率低下,难以满足快速补能需求;安全防护缺失,在恶劣环境下易引发安全事故;兼容性差,无…

实用指南:【图像算法 - 28】基于YOLO与PyQt5的多路智能目标检测系统设计与实现

实用指南:【图像算法 - 28】基于YOLO与PyQt5的多路智能目标检测系统设计与实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

KingView 组态王 6.5下载地址与安装教程

软件介绍 KingView组态王6.5是由北京亚控科技开发的一款工业自动化监控系统软件,专为Windows 2000/NT 4.0(补丁6)/XP简体中文版用户设计。该软件以全面的网络概念为基础,采用多线程技术和COM组件,实现了高效实时的…

常用接口对比

核心概述 外设接口是MCU/处理器与外部设备(传感器、存储器、显示器等)进行通信的桥梁。根据数据传输方式,可分为串行和并行两大类。如今,串行接口因其引脚少、布线简单、成本低而成为绝对主流。常用外设接口详解与…

工具网站网址

1. TTS 简体中文 文字转语音软件 |音独 https://ondoku3.com/zh-hans/