HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047
解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块。
输入是有n个“M",现在已经推出这个公式应该是8 * n^2 - 7 * n + 1,但是这个n的范围达到了10^12次方,只要平方一次就超出long long 的范围了,怎么办呢,用大数?
都试过了,很奇怪,会超时,按照估算的话感觉不会,可能是中间结果比较大吧,这个还在思考,但是10^12平方一次乘以八也只达到了10^25次方级别,所以我们可以用四个__int64来模拟这个结果,这样计算起来就快多了。每一个只存结果的相应的八位,为什么只存八位呢,因为中间要进行平方运算,8位平方以下还好,在long long 的承受范围之内,如果大一点超过long long 就不行了,中间计算的时候相乘就容易溢出,而八位也刚好方便计算。相乘的时候要将大数的对应的位上的long long 两两进行相乘。
还有最后输出结果要注意一点,不能直接输出,中间的数前导0也要输出来,不然看起来就好像少了几个0,反正中间结果用8位的固定格式输出就行了。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef __int64 INT;
struct Big
{
INT d[];
Big()
{
memset(d,,sizeof(d));
}
void print()
{
int flag = ;
for(int i = ;i >= ;--i)
if(d[i] != && !flag)
{
printf("%I64d",d[i]);
flag = ;
}
else if(flag) printf("%08I64d",d[i]);
puts("");
}
};
Big operator * (Big a,Big b)
{
Big c;
INT flag = ;
for(int i = ;i < ;++i)
for(int j = ;j < ;++j)
{
INT temp = a.d[i] * b.d[j] + flag;
if(temp) c.d[i+j] += temp % ;
flag = temp / ;
}
return c;
}
Big operator - (Big a,Big b)
{
Big c;
for(int i = ;i < ;++i)
{
if(a.d[i] < b.d[i])
{
a.d[i+] -= ;
a.d[i] += ;
}
c.d[i] = a.d[i] - b.d[i];
}
return c;
}
Big operator + (Big a,Big b)
{
Big c;
INT flag = ;
for(int i = ;i < ;++i)
{
INT temp = a.d[i] + b.d[i] + flag;
c.d[i] = temp % ;
flag = temp / ;
}
return c;
}
Big valueof(INT x)
{
int f = ;
Big ans;
while(x)
{
ans.d[f++] = x % ;
x /= ;
}
return ans;
}
int main()
{
int T,kase = ;
INT a;
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&a);
Big ans = valueof(a) * valueof(a);
ans = ans * valueof();
ans = ans - (valueof(a) * valueof());
ans = ans + valueof();
printf("Case #%d: ",kase++);
ans.print();
}
return ;
}
HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006的更多相关文章
- 2014 网选 上海赛区 hdu 5047 Sawtooth
题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...
- HDU 5047 Sawtooth(大数优化+递推公式)
http://acm.hdu.edu.cn/showproblem.php?pid=5047 题目大意: 给n条样子像“m”的折线,求它们能把二维平面分成的面最多是多少. 解题思路: 我们发现直线1条 ...
- hdu 4023 2011上海赛区网络赛C 贪心+模拟
以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...
- HDU 5038 Grade北京赛区网赛1005
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5038 解题报告:就是输入n个数w,定义s = 10000 - (100 - w)^2,问s出现频率最高 ...
- HDU 5047 Sawtooth 找规律+拆分乘
Sawtooth Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines ...
- hdu 4026 2011上海赛区网络赛F TSP ****
没看过TSP,先mark //4838039 2011-10-27 23:04:15 Accepted 4026 2343MS 31044K 3143 B C++ Geners //状态压缩DP的TS ...
- hdu 4025 2011上海赛区网络赛E 压缩 ***
直接T了,居然可以这么剪枝 题解链接:点我 #include<cstdio> #include<map> #include<cstring> #define ll ...
- hdu 4028 2011上海赛区网络赛H dp+map离散
一开始用搜索直接超时,看题解会的 #include<iostream> #include<cstdio> #include<map> #include<cst ...
- hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***
不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...
随机推荐
- Raspberry Pi 3 --- Kernel Building and Run in A New Version Kernal
ABSTRACT There are two main methods for building the kernel. You can build locally on a Raspberry Pi ...
- 初始化Git的配置
如何使用Git上传项目代码到github http://blog.csdn.net/llf369477769/article/details/51917557
- django_restframework_angularjs
用Django Rest Framework和AngularJS开始你的项目 作者:Kevin Stone原帖:Getting Started with Django Rest Framework a ...
- php格式化金额函数分享
/** * 格式化金额 * * @param int $money * @param int $len * @param string $sign * @return string */ ...
- asp.net json 与xml 的基础事例
//json序列化和反序列化 using System.Runtime.Serialization.Json; public static string JsonSerializer<T> ...
- 分页探究--Filter+JSTL
最近卡了一个功能就是分页,查了很多资料,分页大概是两种类型:一种是把数据库的东西全部查出来然后放在session里,用list一页一页传到页面,这样的消耗比较大;另一种就是使用sql语句的limit来 ...
- Java——包的概念及使用
package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可 编译语法: javac -d . HelloWord.java -d:表示生成目录,生 ...
- CSS学习笔记——响应式布局
响应式布局 响应式布局是现在很流行的一个设计理念,随着移动互联网的盛行,为解决如今各式各样的浏览器分辨率以及不同移动设备的显示效果,设计师提出了响应式布局的设计方案.所谓的响应式布局,就是一个网站能够 ...
- OpenGL Driver Architecture[转]
http://www.cnblogs.com/cgwolver/archive/2009/01/04/1368350.html
- MIME类型(JSP中)
什么是MIME类型-在把输出结果传送到浏览器上的时候,浏览器必须启动是党的应用程序来处理这个输出文档.这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成.在HTTP中,MIME类型被定义在Co ...