HDU 5047 Sawtooth 高精度
题意:
给出一个\(n(0 \leq n \leq 10^{12})\),问\(n\)个\(M\)形的折线最多可以把平面分成几部分。
分析:
很容易猜出来这种公式一定的关于\(n\)的一个二次多项式。
不妨设\(f(n)=an^2+bn+c\)。
结合样例我们可以列出\(3\)个方程:
\(f(0)=1,f(1)=2,f(2)=19\)
解出三个系数\(a,b,c\),然后用高精度做即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;typedef long long LL;const LL MOD = 1000000000;struct Big
{LL a[5];Big() { memset(a, 0, sizeof(a)); }Big(LL x) { memset(a, 0, sizeof(a)); a[1] = x / MOD; a[0] = x % MOD; }void read() {memset(a, 0, sizeof(a));LL x; scanf("%lld", &x);a[0] = x % MOD; a[1] = x / MOD;}Big operator + (const Big& t) const {Big ans;for(int i = 0; i < 5; i++) ans.a[i] = a[i];for(int i = 0; i < 5; i++) {ans.a[i] += t.a[i];int j = i;while(ans.a[j] >= MOD) {ans.a[j + 1] += ans.a[j] / MOD;ans.a[j++] %= MOD;}}return ans;}Big operator * (const Big& t) const {Big ans;for(int i = 0; i < 5; i++) {for(int j = 0; j < 5; j++) if(i + j < 5) {ans.a[i + j] += a[j] * t.a[i];int k = i + j;while(ans.a[k] >= MOD) {ans.a[k + 1] += ans.a[k] / MOD;ans.a[k++] %= MOD;}}}return ans;}Big operator - (const Big& t) const {Big ans;for(int i = 0; i < 5; i++) ans.a[i] = a[i];for(int i = 0; i < 5; i++) {int j = i + 1;if(ans.a[i] < t.a[i]) {while(!ans.a[j]) j++;ans.a[j]--;for(int k = j - 1; k > i; k--) ans.a[k] += MOD - 1;ans.a[i] += MOD;}ans.a[i] -= t.a[i];}return ans;}void output() {int i = 0;for(i = 4; i; i--) if(a[i]) break;printf("%lld", a[i]);for(int j = i - 1; j >= 0; j--) printf("%09lld", a[j]);printf("\n");}
};int main()
{int T; scanf("%d", &T);for(int kase = 1; kase <= T; kase++) {printf("Case #%d: ", kase);Big x; x.read();Big ans(1);ans = ans + (Big(8) * x * x);ans = ans - (Big(7) * x);ans.output();}return 0;
}
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/5274412.html
HDU 5047 Sawtooth 高精度相关推荐
- 2014 网选 上海赛区 hdu 5047 Sawtooth
题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...
- hdu 1408(高精度)坑人嫩
Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下-,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速 ...
- hdu 1042 N! 高精度运算
N! Time Limit: 10000/50 ...
- 用c语言编写动态爱心树表白,程序员用HTML5制作的爱心树表白动画
HTML代码如下: 程序员用HTML5制作的爱心树表白动画- 柯乐义 本页面采用HTML5技术,目前您的浏览器无法显示,请使用支持HTML5的浏览器查看本页. 亲爱的何文琪: 曾经, 有一份真挚的爱情 ...
- HDU 1047 Integer Inquiry( 高精度加法水 )
链接:传送门 思路:高精度水题 /*************************************************************************> File ...
- Hdu 1753 大明A+B 高精度小数相加
题意: 很长很长的小数相加.. 思路: 用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加.. 然后输出除去前导0和后面0的.. Tips: ※ strchr(cha ...
- HDU 1042 N!( 高精度乘法水 )
链接:传送门 思路:高精度乘法板子题,高精度耗时又耗空间...... /**************************************************************** ...
- HDU - 大明A+B(高精度)
http://acm.hdu.edu.cn/showproblem.php?pid=1753 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: ...
- HDU 1042 N!(高精度阶乘、大数乘法)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...
最新文章
- C++点操作符和箭头操作符
- 创建XNA Shooter游戏——挑战:用引擎编写自己的游戏
- Python地理可视化工具包 folium介绍
- vue 点击li 中的img 怎么不冒泡_Vue全解
- # 20155224 第十一周 课堂练习《计算后缀表达式的值》
- MCS:连续随机变量——Erlang分布
- ANDROID框架揭秘
- 如何搭建百度网盘目录搜索网站
- AD导入原理图库PCB库文件 最强原理图PCB库
- php关闭notice_屏蔽PHP默认设置中的Notice警告的方法
- Riverbed SteelHead 9.5.0
- 2021.1.6寒假打卡Day3
- 四海众联E350N水滴吸顶AP适配说明
- 微信小程序开发自学笔记 —— 九、微信开发者工具
- centOS7 单机 mysql 5.7.24 主从
- long long类型
- 神经网络系统的软件实现,人工智能神经网络系统
- 宋朝记载的超新星爆发和光速不变
- 微信小程序详解(4.运算符和列表渲染)
- c语言文件获取失败问题
热门文章
- usaco Number Triangles
- java 毫秒转时间字符串_java 时间字符串 转换 毫秒
- 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!
- linux部分基础命令总结,Linux 基础命令总结3
- 2008php多版本共存,lnmp安装多版本PHP共存的方法详解
- 打补丁要按顺序吗_通辽正地饲料丨喂猪吃料也要讲究先后顺序! 看看你做对了吗?...
- Awcing算法---区间合并
- 惠普硬盘安装linux,hp台式电脑原本是linux系统,如何安装win7系统
- vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...
- opencv数字图像处理(图像边缘)