[题解] CF 1528B Kavi on Pairing Duty 动态规划+简单数论

题目链接

这是题目给出的部分样例。
让我们仔细看第222个和第777个。好像第777个内层和第222个完全一样?
这让我们反应过来,好像可以dpdpdp。
我们经过进一步的推理可以发现:
设第111个点和第xxx个点相连,那么对于有端点在[x+1,2n][x+1,2n][x+1,2n]的线段,
我们发现,如果这个线段的左端点在[1,x][1,x][1,x]之内,那么这两个线段必相交,故长度一定相等;
如果这个线段的左端点不在[1,x][1,x][1,x]内部,那么他们两个的长度还是必须相等。
有了这个结论,我们就能顺利的推式子了。
设dp[i]dp[i]dp[i]为由2i2i2i个点时总的方案数,那么我们考察与第111个节点相连的边的长度lenlenlen:(这里我们仍然应用上个结论中的点xxx)
Case1:len≥n+1Case 1: \ len \ge n+1Case1: len≥n+1,那么对于在xxx右边的点显然左端点只能在[1,x][1,x][1,x]以内。把所有的在[x+1,2n][x+1,2n][x+1,2n]的点操作完之后,我们发现中线还胜了一部分点没有配对,这时候只需要利用之前的状态就行了。
再通过观察样例,可以知道所有len∈[n+1,2n−1]len \in [n+1,2n-1]len∈[n+1,2n−1]产生的贡献为∑i=1n−1dp[i]\sum_{i=1}^{n-1}dp[i]i=1∑n−1​dp[i]
显然需要用前缀和优化。
Case1:len≤nCase 1: \ len \le nCase1: len≤n,那么根据我们之前的结论和观察样例,所有的线段长度一定一样,不管是和第111个相交的还是不相交的。
我们在仔细观察样例,可以发现左端点在[1,x−1][1,x-1][1,x−1]的线段构成一个小块,长度为2∗len2*len2∗len。如果想要为dp[i]dp[i]dp[i]做贡献,必有2∗len∣2∗n2*len|2*n2∗len∣2∗n,即len∣nlen|nlen∣n故此时能够产生的总贡献为d(n)d(n)d(n).
综上所述,可以推出来这个式子:dp[n]=∑i=1n−1dp[i]+d(n)dp[n] = \sum_{i=1}^{n-1}dp[i]+d(n)dp[n]=i=1∑n−1​dp[i]+d(n)
最后用样例检查了一下这个式子,发现没问题。
用线性筛筛出ddd,时间复杂度O(n)O(n)O(n)。

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
using namespace std;const double eps = 1e-10;
const double pi = acos(-1.0);
const int maxn = 1e6 + 10;
const ll mod = 998244353;int n;
ll dp[maxn];
ll sum[maxn];int p[maxn],cnt;
int a[maxn];//i的最小素因子次数
int d[maxn];//约数个数
bool isp[maxn];void getp(){isp[1] = 1;d[1] = 1;for(int i = 2; i < maxn; i++){if(!isp[i]){p[++cnt] = i;a[i] = 1;d[i] = 2;}for(int j = 1; j <= cnt && i*p[j] < maxn; j++){isp[i*p[j]] = 1;if(i%p[j] == 0){a[i*p[j]] = a[i]+1;d[i*p[j]] = d[i]/(a[i]+1)*(a[i]+2);break;}else{a[i*p[j]] = 1;d[i*p[j]] = 2*d[i];}}}
}void solve(){getp();scanf("%d",&n);dp[1] = sum[1] = 1;for(int i = 2; i <= n; i++){dp[i] = (sum[i-1]+d[i]) % mod;sum[i] = (sum[i-1]+dp[i]) % mod;}printf("%lld\n",dp[n]);
}int main()
{solve();return 0;
}

[题解] CF 1528B Kavi on Pairing Duty相关推荐

  1. 思维dp ---- Codeforces Round #722 (Div. 1) B. Kavi on Pairing Duty [思维dp + 数学]

    题目大意: 将2n2n2n个点两两相连形成n对,对于任意两个点对A和B,要求至少满足其中一条: 1.A和B的某一个完全包含于另一个中 2.A和B的长度相等.问你一共有多少种方案. 解题思路: 题解:假 ...

  2. 题解 CF 1413B A New Technique

    原题 题面简化 TTT 组数据 用 nnn 行.mmm 列的不重数字按输入顺序组成一个矩阵 数据范围 1≤T≤1000001≤T≤1000001≤T≤100000 1≤n,m≤5001≤n,m≤500 ...

  3. [题解]CF Round #386 (Div.2)

    747A:Display Size 题意简述 给你 n n,求一对x,yx,y使得 x∗y=n x \ast y=n并且 x,y x,y最接近. 数据范围 n≤106 n \leq 10^6 思路 从 ...

  4. 大一下第十四周学习笔记

    周二 6.1(dp) 这周开始刷kuangbin基础dp专题.昨天写高数作业去了没训练 A - Max Sum Plus Plus(dp空间与时间优化) 这题的dp方程我写出来了,但是感觉空间也炸时间 ...

  5. [CF/AT]各大网站网赛 体验部部长第一季度工作报告

    文章目录 CodeForces #712 (Div. 1)--1503 A. Balance the Bits B. 3-Coloring C. Travelling Salesman Problem ...

  6. Codeforces Round #722 (Div. 2)

    Codeforces Round #722 (Div. 2) 题号 题目 知识点 A Eshag Loves Big Arrays(题解略) 贪心 B Sifid and Strange Subseq ...

  7. CF 1742C 题解 P8557 炼金术(Alchemy) 题解

    温馨提示:\color{#E74C3C}\text{温馨提示:}温馨提示: 遇见题解勿抄袭,棕名封号两行泪.\color{#E74C3C}\text{遇见题解勿抄袭,棕名封号两行泪.}遇见题解勿抄袭, ...

  8. codeforce 332B Maximum Absurdity

    原题链接 题意 一个长为N的序列,选择其中2个长为K的不相交区间,使两个区间和最大 题解 CF标签上写的好好的DP,做着做着发现就是前缀和思想嘛,哪里有DP?哪里有DP? #include<bi ...

  9. 2020-12-02 Centos8.2邮件服务器搭建攻略!一文吃透Postfix+Dovecot+MySQL!

    1.jpg 今天来聊聊Linux邮件服务器的搭建,本以为这不是一件很困难的事情,毕竟电子邮件这种高度成熟的技术应该有很容易部属吧,上手后才发现原来坑还真不少.本方案以主流的postfix + dova ...

  10. android网络编程_Android上的网络编程

    android网络编程 This article is a short foray into how I setup my development environment in on an Andro ...

最新文章

  1. CSS3自定义滚动条
  2. php 计算字符串相邻最大重复数_php如何解决字符串中重复字符的次数并且排序输出的方法...
  3. 搜索专题【2010】四2.过河问题
  4. hashdos_调查HashDoS问题
  5. kafka 集群的部署安装
  6. python 安装echarts
  7. python小明爬楼梯_LintCode Python 简单级题目 111.爬楼梯 (斐波纳契数列 青蛙跳)
  8. JQuery AJAX 的表单提交
  9. <永洪BI>慢查询记录
  10. 一次破解TP-Link WAR308路由器的经历(2)
  11. 『STATISTICS』傻瓜弄懂t检验
  12. 23种设计模式python版
  13. 带参数矩阵求逆(matlab)
  14. 780. 到达终点 (Reaching Points)
  15. 上海落户计算机水平毕业研究生,2021应届生落户上海打分标准,部分毕业生可直接落户上海...
  16. 中债隐含评级、YY评级、外部评级的参照系
  17. 3种漂亮的登录表单页面css3+html5模板
  18. 基于财务预测的基本面因子的分析
  19. PEEK薄膜特性与各型号性能特征分析
  20. “沉浸式大型线下游戏”?看看这次腾讯TGC上如何玩很大!

热门文章

  1. 尼古拉斯·卡尔:IT发兵“云计算”
  2. 错误解决:ThinkPHP 3.1 { Fast Simple OOP PHP Framework } -- [ WE CAN DO IT JUST THINK ]
  3. QCC3040---DFU(OTA)固件生成方法OTA方法
  4. 计算机网络技术组装与维护,计算机组装与维护计算机网络技术(组网)()课程标准(范文).doc...
  5. 【信息技术】【2003.03】视觉监控应用中人体跟踪算法的设计与实现
  6. SQL从数据库导出数据到EXCEL换行的问题解决方法
  7. 男生追女生的套路有哪些?男生追女生的套路!
  8. 男生追女生时的21个致命问题
  9. R语言错误的提示(中英文翻译)
  10. Python保留指定位数的小数