[杂题]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,模拟赛里那道题的 ...
随机推荐
- mac OS X下git代码行统计命令
1.统计某人的代码提交量,包括增加,删除 git log --author=-- --until=-- --pretty=tformat: --numstat | awk '{ add += $1 ; ...
- Java对象校验框架之Oval
只要有接口,就会有参数的校验,目前开源的校验框架已经非常多了,不过不得不提一下Oval.OVal 是一个可扩展的Java对象数据验证框架,验证的规则可以通过配置文件.Annotation.POJO ...
- Oracle中的IF...THEN...ELSE判断
if...then...else是最常见的一种判断语句,他可以实现判断两种情况. 标准语法如下: if <condition_expression> then plsql_sentence ...
- mac os快捷键
选中一个词,使用control+command+d,可以启用词典 option+command+d,隐藏/显示 doc command + k terminal 清除历史记录 control + up ...
- Mac OS X 安装 brew 工具!
最早的ports管理就是BSD那种,后来出现强大的Debian,弄了个dpkg+apt! Mac OS X 最早使用比较多的工具是 MacPorts,但是现在来看这个工具有点老,不是很稳定,那我们推荐 ...
- 自定义更新Hibernate Ehcache
最近在做一个项目中需要用缓存,项目持久层用的是Hibernate,然后就考虑用二级缓存来实现,但是后来项目扩展,由第三方修改数据这样缓存就会要等到失效后重新获取数据库的数据,本来这样是没问题的,可是领 ...
- Google Code Jam 2015 Round1A 题解
快一年没有做题了, 今天跟了一下 GCJ Round 1A的题目, 感觉难度偏简单了, 很快搞定了第一题, 第二题二分稍微考了一下, 还剩下一个多小时, 没仔细想第三题, 以为 前两个题目差不多可以晋 ...
- sharepoint mysite and upgrade topics
My Sites overview (SharePoint Server 2010)http://technet.microsoft.com/en-us/library/ff382643(v=offi ...
- cocos2.2.3中创建精灵对象的三大类方法
1.众生相,皆精灵 2.精灵的类继承关系 class CCSprite : public CCNode, public CCNodeRGBA, public CCTextureProtocol 3.创 ...
- LintCode-Median II
Numbers keep coming, return the median of numbers at every time a new number added. Example For numb ...