Problem Description
一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S。
例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S。但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集
给定n,求JZP集的个数。
 
Input
第一行为T,表示输入数据组数。
每组数据包含一行整数n。

限制条件
1<=T<=10^5
1<=n<=10^7

 
Output
对第i组数据,输出
Case #i:
然后输出JZP集的个数。
 
题目大意:略。
思路:考虑到n高达10^7,而T也不小,选择递推预处理出所有答案。
观察(x+y)/2,对集合里的每个数都有这种规律的话,能想到类似的东西就是等差数列。
令ans[i]代表集合[1..i]的JZP子集(空集也算的),那么有ans[i] = ans[i - 1] + count(包含i的[1..i]的JZP子集)。
那么令p[i] = 包含i的[1..i]的JZP子集个数。考虑包含i的等差数列,可以发现等差一定为奇数(偶数都无法构成JZP集合,手动试一下就能发现了)。
首先p[i]有只包含一个数的{i}。
之后对于元素个数大于等于2的,等差为1的子集个数为(i-1)/1,等差为3的子集个数为(i-1)/3……
但是这还不能满足题目的要求。
考虑p[i]-1和p[i-1]-1的区别,对于(i-1)/1+(i-1)/3+(i-1)/5……和(i-2)/1+(i-2)/3+(i-2)/5……,对于分母为x的,(i-1) / x > (i-2) / x当且仅当(i-1)是x的倍数
可以得出p[i]比p[i-1]要大count(i-1的奇数约数)。
对于每个数的约数个数,可以在O(nlogn)的时间里预处理出来(参考素数的筛法)。
然后递推ans[i] = ans[i - 1] + p[i],至此题目完美解决!
 
代码(2109MS):
 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
typedef long long LL; const int MAXN = 1e7 + ; int cnt[MAXN];
LL ans[MAXN]; void initc() {
int n = 1e7;
for(int i = ; i <= n; i += ) {
for(int j = i; j <= n; j += i) cnt[j]++;
}
} void init() {
initc();
int n = 1e7;
ans[] = ;
LL t = ;
for(int i = ; i <= n; ++i) {
t += cnt[i - ];
ans[i] = ans[i - ] + t + ;
}
} int main() {
init();
int T, n;
scanf("%d", &T);
for(int t = ; t <= T; ++t) {
scanf("%d", &n);
printf("Case #%d:\n", t);
printf("%I64d\n", ans[n]);
}
}

HDU 4834 JZP Set(数论+递推)(2014年百度之星程序设计大赛 - 初赛(第二轮))的更多相关文章

  1. 2014年百度之星程序设计大赛 - 初赛(第二轮)JZP Set

    题目描述:一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S.例如,n=3,S={1,3}不是JZP集,因为(1+ ...

  2. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...

  3. HDU 4832 Chess(DP+组合数学)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,“王”在棋盘上的走法遵循十字路 ...

  4. 2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

    题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展g ...

  5. hdu 4825 Xor Sum (建树) 2014年百度之星程序设计大赛 - 资格赛 1003

    题目 题意:给n个数,m次询问,每次给一个数,求这n个数里与这个数 异或 最大的数. 思路:建一个类似字典数的数,把每一个数用 32位的0或者1 表示,查找从高位向底位找,优先找不同的,如果没有不同的 ...

  6. 2014年百度之星程序设计大赛 - 初赛(第二轮)Chess

    题目描述:小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,“王”在棋盘上的走法遵循十字路线.也就是说,如果“王”当前在 ...

  7. 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule

    双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描写叙述:平面上n个点,确定一条连接各点的最短闭合旅程 ...

  8. HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  9. HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))

    小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

随机推荐

  1. ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click 'Restart'

    ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click ...

  2. Oracle数据导入导出imp/exp

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失). Oracle有个好处,虽然你的电 ...

  3. 创建podSpec,使用pod管理第三方库

    提要: podfile文件会先读取.podspec文件,根据.podspec文件的指向来下载第三方库到项目中. 本文先通过一.二.三项,这三个步骤讲解了如何建立一个.podspec文件在本地.coco ...

  4. Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...

  5. Top Five Communication Skills for Project Managers

    Research among project managers globally identifies top communication skills for leading teams. Lead ...

  6. Oracle中的数据类型和数据类型之间的转换

    Oracle中的数据类型 /* ORACLE 中的数据类型: char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 ...

  7. iOS 支付 [支付宝、银联、微信](转载)

    资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一. ...

  8. EXP的flashback_scn和flashback_time

    数据库设置 a. 设置UNDO_RETENTION的初始值(在短时间内)代表你想要查过去多远的时间. b. 设置初始化参数UNDO_MANAGEMENT=AUTO. c. 建立一个还原点空间,要有足够 ...

  9. Eclipse常用设置(转)

    http://jingyan.baidu.com/article/3065b3b6efa9d7becff8a4c6.html 用惯了VS,再回过去用Eclipse真是一件痛苦的事.so,在这里记录下使 ...

  10. 添加gogs服务后 web丢失样式问题

    暂时的解决办法