[杂题]URAL2047. Maths
题意:构造一个长度为n的串,使得 除了第一个以外,每个位置的前缀和的因子个数恰好等于该位置上的数。
n$\le 100000$
举个例子$a_i$:2 4 6 6 4 8 4 8 4 8
前缀和 : 6 12 18 22 30 34 42 46 54
6的因子:1 2 3 6 为4个 等于a[2]
12的因子:1 2 3 4 6 12 为6个 等于a[3]
18的因子:1 2 3 6 9 18 为6个 等于a[4]
...
...
54的因子:1 2 3 6 9 18 27 54 为8个 等于a[9]
所有都满足,则该列合法
一开始一直在想到哪儿为止会Impossible
然后就打算暴力一发 看到哪儿为止
后来发现正着写,根本写不出来。
于是发现把每个数的因子数写出来,倒着减回去,
每个数回去都只有一条路,最长的就是答案。
比如
27这个数回去 长度为9
26这个数回去 长度为6
...
每个数回去都有一个长度
后来发现只需知道 “那个数减去因子个数” 的 那个数 回去有多长+1就好啦
那只要预处理一下因子个数
正着for一遍,O(1)就能得到长度
(for的是 和 , 长度就是题目输入的n , 需要输出的是 长度最长的那一串回去的路上的数的因子数)
那么打个这样的表,只需1秒钟
int phi[];
int pri()
{
memset(phi, , sizeof(phi));
for(int i=;i<=;i++)
for(int j=i;j<=;j+=i)
phi[j]++;
} int dp[];
void pre()
{
memset(dp, , sizeof(dp));
dp[]=, dp[]=;
for(int i=;i<=;i++)
{
int num=phi[i]+;
// if(num>300 || dp[i-num]==-1)
// dp[i]=-1;
// else
dp[i]=dp[i-num]+;
// printf("%d %d\n", i, dp[i]);
if(dp[i]>=)
{
printf("%d %d\n", i, dp[i]);
break;
}
}
} int main()
{
// freopen("out.txt", "w", stdout);
pri();
pre();
return ;
}
得到的这个1568617就是n为100000的最后一个数
要得到n个数,倒着减回去就好了
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PI;
const int N=1e5+;
const double eps=1e-;
const int mod=1e9+; int ans[], d;
int phi[];
void pre()
{
memset(phi, , sizeof(phi));
for(int i=;i<=;i++)
for(int j=i;j<=;j+=i)
phi[j]++;
int x=;
d=;
while(x)
{
ans[d++]=x;
int num=phi[x]+;
x-=num;
}
} int main()
{
pre();
int n;
while(~scanf("%d",&n))
{
int sum=;
for(int i=d-, j=;j<=n;j++, i--)
{
printf("%d", ans[i]-sum);
sum=ans[i];
if(j==n)
puts("");
else
putchar(' ');
}
}
return ;
}
Ural 2047
[杂题]URAL2047. Maths的更多相关文章
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
- wangkoala杂题总集(根据个人进度选更)
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- 【Java面试】-- 杂题
杂题 2019-11-03 21:09:37 by冲冲 1.类加载器的双亲委派机制 类加载器:把类通过类加载器加载到JVM中,然后转换成class对象(通过类的全路径来找到这个类). 双亲委派机制 ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
随机推荐
- c++11: bind用法
原型: template< class R, class F, class... Args > bind( F&& f, Args&&... args ); ...
- PHP时间戳
strtotime strtotime("Today"); #今天凌晨0点的时间戳 strtotime('now'); #当前时间的时间戳 strtotime ( &quo ...
- 如何在CentOS5中增加CentALT的源
1. 建立centalt.repo 指令: vi /etc/yum.repos.d/centalt.repo 2. 將下面的內容貼進去 [CentALT] name=CentALT ...
- Python-Day2 Python基础进阶之数据类型
一.数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) Python ...
- GITHUB 提交错误 Error: Permission denied (publickey) 解决
1. 在开发机上生成自己的密钥 ssh-keygen -b 1024 -t rsa -b 指密钥对长度 -t 指加密方式 Enter file in which to save the key ( ...
- python之内置类型: 序列, 字典
序列: 元素之类有序的类型. Python 2.x支持6种内置序列: list, tuple, string, ustring, buffer, xrange (1)序列的定义: list: [] t ...
- C#中DataTable与实体集合通用转换(使用扩展方法)
本案例提供了:把DataRow转换为单个实体.dataTable转换为List泛型支持时间格式转换. 下文的方法都是扩展方法.扩展方法要求写在静态类中,方法也要静态. 它必须在一个非嵌套.非泛型的静态 ...
- 【转】java获取当前路径的几种方法
1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...
- JPA学习---第一节:JPA详解
一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...
- Interview-Harry Potter walk through matrix.
假设你是harry potter,在grid的左上角,你现在要走到右下角,grid中有正数也有负数,遇到正数表示你的strength增加那么多,遇到负数表示strength减少那么多,在任何时刻如果你 ...