HDU 5047 Sawtooth(大数优化+递推公式)
http://acm.hdu.edu.cn/showproblem.php?pid=5047
题目大意:
给n条样子像“m”的折线,求它们能把二维平面分成的面最多是多少。
解题思路:
我们发现直线1条:2平面;2直线:4平面;3直线:7平面......因为第n条直线要与前面n-1条直线都相交,才能使分的平面最多,则添加第n条直线,平面增加n个;
所以公式是面F = 2 + 2 + 3 + ......+ n = (1+n)*n/2 + 1
因为题目的是“M”的折线,一个“M”有4条线将平面分成2块,4条直线将平面分成11块,它们之间相差9块; 当两个“M”,平面分成19块,8条直线,平面分成37块,相差18,
是9的倍数。平面每增加一个“M”,平面的相当于增加4条直线,但要减去9块(结论在徒弟百度上面找到的,我也不知道为什么)。这个结论适合"z",“V”....这些折线都适合。
给n个“M”,公式F = (1+4*n)*4*n/2+1-n*9 = n*(8*n-7)+1
因为n最大是10^12,__int64(long long)都是9*10^18,n*n就会数据溢出。开始的时候没有计算时间复杂度,就用普通的大数运算,结果超时。后来师兄说大数有优化,
就是将一个大数分成左右两部分,分别用__int64 存。
因为防止两个数相乘数据溢出,所以我的数右半部分是9位数。举个例子 2100123456789,ans1=2100,ans0=123456789;
因为这个大数这样分,最多两部分所以推到公式如下
AC代码:
#include<cstdio> typedef __int64 LL; #define MOD 1000000000 int main(){
LL n, a[], b[], ans[];
int t;
scanf("%d", &t);
for(int cs = ; cs <= t; ++cs){
scanf("%I64d", &n); a[] = ( * n - ) % MOD;
a[] = ( * n - ) / MOD; b[] = n / MOD;
b[] = n % MOD; ans[] = a[] * b[] + ;
ans[] = a[] * b[] + a[] * b[] + a[] * b[] * MOD + ans[] / MOD;
ans[] %= MOD; printf("Case #%d: ", cs);
if(ans[]){
printf("%I64d%09I64d\n", ans[], ans[]);
}else{
printf("%I64d\n", ans[]);
}
}
return ;
}
,
HDU 5047 Sawtooth(大数优化+递推公式)的更多相关文章
- HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...
- 2014 网选 上海赛区 hdu 5047 Sawtooth
题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...
- HDU 5047 Sawtooth 找规律+拆分乘
Sawtooth Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines ...
- HDU 5047 Sawtooth 高精度
题意: 给出一个\(n(0 \leq n \leq 10^{12})\),问\(n\)个\(M\)形的折线最多可以把平面分成几部分. 分析: 很容易猜出来这种公式一定的关于\(n\)的一个二次多项式. ...
- hdu 2829 Lawrence(斜率优化DP)
题目链接:hdu 2829 Lawrence 题意: 在一条直线型的铁路上,每个站点有各自的权重num[i],每一段铁路(边)的权重(题目上说是战略价值什么的好像)是能经过这条边的所有站点的乘积之和. ...
- HDU 2920 分块底数优化 暴力
其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...
- hdu 5047 大数找规律
http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include & ...
- HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others) M ...
- 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...
随机推荐
- 我的c++学习(10)this指针
问题:当在对象的外部访问该对象的公有成员时,必须指明是哪一个对象.但是当我们用对象的成员函数来访问本对象的成员时,在成员函数中只要给出成员名就可以实现对该对象成员的访问.再进一步可用同一个类创建很多个 ...
- containing block
1(position:static和relative) 它的包含块由它最近的块级.单元格(table cell)或者行内块(inline-block)祖先元素创建. 2.position:fixed ...
- dedecms在首页或列表调取文章内容body的三个方法
有时需要在网站首页或栏目封面上显示几篇文章的内页作为导语或其他什么的,但acrlist标签是不能直接调取body的,这时我们就需要使用以下方法来调取body. 方法一:arcticle 标签 加上ch ...
- MYSQL trigger 个人记录
同学要写个trigger,稍微帮他研究了下 以下主要是个人猜想理解的 主要讲update 我们在创建trigger时,数据库会对创建了trigger的表进行事件监听. 当表中的一条记录发生update ...
- <八>JDBC_重构DAO查询方法
DAO类: import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import ...
- 客户端JavaScript-如何执行
客户端JavaScript程序有四部分:内联脚本.HTML事件处理程序.URL中的JavaScript.外联脚本:所有这些单独的代码共用同一个全局Window对象,它们可以看到相同的Document对 ...
- 温故而知新 兼容性较强的轮播器superslide.js
官网: http://www.superslide2.com/index.html demo: http://www.superslide2.com/demo.html API: http://www ...
- javascript 数字进制转换
//十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...
- Pycharm Professional Edition 激活码(license)
http://blog.csdn.net/yangysc/article/details/52355865 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiw ...
- java 4种方式读取配置文件 + 修改配置文件
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 方式一采用ServletContext读取读取配置文件的realpath然后通过文件流读取出来 方式二采用ResourceB ...