首页 > HDU 5047 Sawtooth 高精度

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 
#include 
#include 
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("
");}
};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

更多相关:

  • 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedia...

  • 前言 堆数据结构 使用的是优先级队列实现,创建堆的时候需要指定堆中元素的排列方式,即最大堆或者最小堆 最大堆即 堆顶元素为堆中最大的元素 最小堆即 堆顶元素为堆中最小堆元素 如下为一个最大堆 中位数: 一组数排序后,如果元素个数如下 奇数个数n:(int) n/2 的数 偶数个数n: (int) n/2 和(int) n/2...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...