中石油训练赛 - Count the Even Integers(Java高精度运算+找规律)
题目大意:给出一个 n ,求出前 n 行的杨辉三角形中有多少个偶数
题目分析:先用暴力打个表,去oeis查一下,可以查出规律:
规律为一个递归,用记忆化搜索很容易实现:
- n== 0 || n==1:a[ n ] = 0
- a[ 2 * n ] = 3 * a[ n ] + n * ( n - 1 ) / 2
- 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高精度运算+找规律)相关推荐
- 中石油训练赛 - Fermat‘s Optimization Problem(Java高精度运算+二分)
题目大意:给出误差函数 ,现在给出 z 和 n,要求求出 x 和 y ,使得函数 F 的取值最小 题目分析:首先数据范围是幂次级别的,1e5 的 10 次方,也就是 1e50 次方,需要用到大数,我用 ...
- 中石油训练赛 - Trading Cards(最大权闭合子图)
题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...
- 中石油训练赛 - Plan B(点双缩点+树形dp)
题目大意:给出一张 n 个点 m 条边的无向连通图,现在有某些点被标记了,问能否通过删除某个未被标记的点,使得删除该点后的数个互不相交的连通块中,至少存在一个联通块中不含有被标记的点 题目分析:首先不 ...
- 中石油训练赛 - Watch Later(状压dp)
题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...
- 中石油训练赛 - One-Way Conveyors(边双缩点+树上差分)
题目链接:点击查看 题目大意:给出一张 n 个点 m 条边的无向图,现在需要将这张图转换为有向图,并且使得 k 个可达条件成立,输出一种构造方案 题目分析:如果在无向图中出现环的话,那么在转换为有向图 ...
- 中石油训练赛 - 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 ...
- 中石油训练赛 - Racing Gems(最长不下降子序列)
题目描述 You are playing a racing game. Your character starts at the X-axis line (y=0) and ...
- 中石油训练赛 - Perfect Tree(dfs)
题目描述 Given a positive integer k, we define a rooted tree to be k-perfect, if and only if it meets bo ...
- 中石油训练赛 - Bee Problem(dfs+连通块)
题目描述 You are a busy little bee, and you have a problem. After collecting nectar all day long, you ar ...
最新文章
- 计算机学院特色游戏,网络游戏七大特点浅析
- LinuxC-运算符
- v-if 的区别v-show
- 烤烟发病叶片高光谱特征分析
- 常用推荐算法(50页干货)
- Atitit 数据存储的数据表连接attilax总结
- Outlook连接Gmail不成功可以试试以下方法
- 笔耕不辍 | Redis入门
- Base64与bitmap之间相互转换
- 微信公众号消息text换行问题
- 利用Python绘制一朵太阳花
- 【自学python爬虫】:入门书籍推荐(附资源)
- 寻址空间为数据程序储存器_MCS-51单片机存储地址空间划分
- CPU、内存、磁盘三者的关系
- 系统学习机器学习之SVM(四)--SVM算法总结
- 创业公司如何应对大公司的冲击
- 整理18、19、20年关于《人工智能》的标准和评估规范
- 【CTF-misc】真是阳间题!
- 12.10 Daily Scrum
- rabbitMQ如何避免重复消费