题目大意:给出一个 n ,求出前 n 行的杨辉三角形中有多少个偶数

题目分析:先用暴力打个表,去oeis查一下,可以查出规律:

规律为一个递归,用记忆化搜索很容易实现:

  1. n== 0 || n==1:a[ n ] = 0
  2. a[ 2 * n ] = 3 * a[ n ] + n * ( n - 1 ) / 2
  3. a[ 2 * n + 1 ] = 2 * a[ n ] + a[ n + 1 ] + n * ( n + 1 ) / 2

因为每次 n 都会除以 2 ,所以时间复杂度控制在了 log 级别,配合一个 map 写一下记忆化搜索就可以了

代码:

import java.math.BigInteger;
import java.util.Scanner;
import java.util.HashMap;public class Main {public static Scanner cin = new Scanner(System.in);public static BigInteger _0=BigInteger.ZERO,_1=BigInteger.ONE,_2=BigInteger.valueOf(2),_3=BigInteger.valueOf(3);public static HashMap<BigInteger,BigInteger>mp=new HashMap<BigInteger,BigInteger>();public static BigInteger dfs(BigInteger n){if(mp.containsKey(n))return mp.get(n);BigInteger ans=_0;if(n.compareTo(_0)==0||n.compareTo(_1)==0)ans=_0;else if(n.remainder(_2).compareTo(_0)==0)//偶数{BigInteger n_div_2=n.divide(_2);ans=_3.multiply(dfs(n_div_2)).add(n_div_2.multiply(n_div_2.subtract(_1)).divide(_2));}else//奇数{BigInteger n_div_2=n.divide(_2);ans=_2.multiply(dfs(n_div_2)).add(dfs(n_div_2.add(_1))).add(n_div_2.multiply(n_div_2.add(_1)).divide(_2));}mp.put(n,ans);return ans;}public static void main(String[] args){while(cin.hasNextBigInteger()){mp.clear();BigInteger n=cin.nextBigInteger();System.out.println(dfs(n.add(_1)));}}
}

中石油训练赛 - Count the Even Integers(Java高精度运算+找规律)相关推荐

  1. 中石油训练赛 - Fermat‘s Optimization Problem(Java高精度运算+二分)

    题目大意:给出误差函数 ,现在给出 z 和 n,要求求出 x 和 y ,使得函数 F 的取值最小 题目分析:首先数据范围是幂次级别的,1e5 的 10 次方,也就是 1e50 次方,需要用到大数,我用 ...

  2. 中石油训练赛 - Trading Cards(最大权闭合子图)

    题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...

  3. 中石油训练赛 - Plan B(点双缩点+树形dp)

    题目大意:给出一张 n 个点 m 条边的无向连通图,现在有某些点被标记了,问能否通过删除某个未被标记的点,使得删除该点后的数个互不相交的连通块中,至少存在一个联通块中不含有被标记的点 题目分析:首先不 ...

  4. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  5. 中石油训练赛 - One-Way Conveyors(边双缩点+树上差分)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边的无向图,现在需要将这张图转换为有向图,并且使得 k 个可达条件成立,输出一种构造方案 题目分析:如果在无向图中出现环的话,那么在转换为有向图 ...

  6. 中石油训练赛 - 01 Matrix(构造)

    题目描述 We have a square grid with H rows and W columns. Snuke wants to write 0 or 1 in each of the squ ...

  7. 中石油训练赛 - Racing Gems(最长不下降子序列)

    题目描述 You  are  playing  a  racing  game.  Your  character  starts  at  the  X-axis  line  (y=0)  and ...

  8. 中石油训练赛 - Perfect Tree(dfs)

    题目描述 Given a positive integer k, we define a rooted tree to be k-perfect, if and only if it meets bo ...

  9. 中石油训练赛 - Bee Problem(dfs+连通块)

    题目描述 You are a busy little bee, and you have a problem. After collecting nectar all day long, you ar ...

最新文章

  1. 计算机学院特色游戏,网络游戏七大特点浅析
  2. LinuxC-运算符
  3. v-if 的区别v-show
  4. 烤烟发病叶片高光谱特征分析
  5. 常用推荐算法(50页干货)
  6. Atitit 数据存储的数据表连接attilax总结
  7. Outlook连接Gmail不成功可以试试以下方法
  8. 笔耕不辍 | Redis入门
  9. Base64与bitmap之间相互转换
  10. 微信公众号消息text换行问题
  11. 利用Python绘制一朵太阳花
  12. 【自学python爬虫】:入门书籍推荐(附资源)
  13. 寻址空间为数据程序储存器_MCS-51单片机存储地址空间划分
  14. CPU、内存、磁盘三者的关系
  15. 系统学习机器学习之SVM(四)--SVM算法总结
  16. 创业公司如何应对大公司的冲击
  17. 整理18、19、20年关于《人工智能》的标准和评估规范
  18. 【CTF-misc】真是阳间题!
  19. 12.10 Daily Scrum
  20. rabbitMQ如何避免重复消费

热门文章

  1. php 检测密码,php 密码强度检测代码
  2. 安装Nacos Server
  3. Nacos源码覆盖实例列表
  4. RabbitMQ消息应答
  5. mybatis整体架构
  6. Curator实现分布式锁的基本原理-getTheLock
  7. spring整合junit问题分析
  8. 文件操作-小文件复制
  9. SpringBoot_web开发-简介
  10. 如何判断对象是否存活之根搜索算法