UVA 11375 高精度Bign类
求火柴的组成的数字最多能组成多少种数字,典型的递推问题
但是因为结果巨大,要用高精度运算
一开始手写高精度,不仅挫的要死,最后还WA了。
最后学了一下白书上面的bign类,相当方便啊。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#define N 720
using namespace std;
struct bign
{
int len,s[N];
bign()
{
memset(s,,sizeof s);
len=;
}
bign(int num) {*this=num;}
string str()const
{
string res="";
for(int i=;i<len;i++) res=(char)(s[i]+'')+res;
if(res=="") res="";
return res;
}
bign operator = (const char* num)
{
int i;
len=strlen(num);
for (i=;i<len;i++)
{
s[i]=num[len-i-]-'';
}
return *this;
}
bign operator =(int num)
{
char s[N];
sprintf(s,"%d",num);
*this=s;
return *this;
}
bign operator + (const bign& b )const
{
bign c;
c.len=;
int i,g=;
for (i=,g=;g||i<max(len,b.len);i++)
{
int x=g;
if (i<len) x+=s[i];
if (i<b.len) x+=b.s[i];
c.s[c.len++]=x%;
g=x/;
}
return c;
} };
istream& operator >>(istream &in, bign& x)
{
string s;
in >> s;
x = s.c_str();
return in;
}
ostream& operator <<(ostream &out, const bign& x)
{
out << x.str();
return out;
}
bign f[];
bign ans[];
int c[]={,,,,,,,,,};
int n;
int main()
{
for (int i=;i<=;i++)
f[i]=;
f[]=;
for (int i=;i<=;i++)
{
for (int j=;j<=;j++)
{
if (i+c[j]<= && !(i== && j==))
{
f[i+c[j]]=f[i+c[j]]+f[i];
}
}
}
ans[]=;
for (int i=;i<=;i++)
{
ans[i]=ans[i-]+f[i];
}
while (scanf("%d",&n)!=EOF)
{
if (n>=)
cout<<ans[n]+<<endl;//这里一开始写成直接 ans[n]=ans[n]+1,WA了好多次都没发现啊啊啊,不能改变原有值啊啊。。太粗心了
else
cout<<ans[n]<<endl;
}
return ;
}
UVA 11375 高精度Bign类的更多相关文章
- C++高精度运算类bign (重载操作符)
大数据操作,有例如以下问题: 计算:456789135612326542132123+14875231656511323132 456789135612326542132123*14875231656 ...
- [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
[原创 转载请注明]瞎写的,如果代码有错,或者各位大佬有什么意见建议,望不吝赐教 更新日志: 对于规模较小的整数乘法使用$$O(n^2)$$方法,提高速度 modify()和operator[]的bu ...
- 【Java】【高精度】【递推】UVA - 11375 - Matches
d[i+c[j]]+=d[i](c[j]是拼成j所需的火柴数) d[0]=1: 别忘了不能有前导零,所以当i为零时,不要尝试去拼成零.反而应该在n>=6时,最后给答案加1(单独拼出0). imp ...
- .net平台下获取高精度时间类
原文:http://www.it118.org/specials/321869dd-98cb-431b-b6d2-82d973cd739d/d940a15c-0d36-4369-8de0-b07cf3 ...
- UVa 11375 - Matches
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 一个 C# 获取高精度时间类(调用API QueryP*)
如果你觉得用 DotNet 自带的 DateTime 获取的时间精度不够,解决的方法是通过调用 QueryPerformanceFrequency 和 QueryPerformanceCounter这 ...
- 紫书 习题 10-16 UVa 1647 (高精度+递推)
这道题我已经推出00和1过两步变成00了,可我没有继续做下去-- 后来看了博客发现自己已经做了90%了-- 可惜了,以后不要轻易放弃. 1的个数有个规律,就是每次都乘以2,因为0和1下一步都会变出1 ...
- uva 11375
思路是刘书上的 但是个高精度 java 大数 ~~ import java.util.*; import java.io.*; import java.math.BigInteger; public ...
- uva 11375 Matches (递推)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
随机推荐
- javascript实现ul中列表项随机排列
方法1 <!DOCTYPE html><html lang="en"><head> <script type="text/jav ...
- delphi保存和提取ini文件信息
procedure TLoginForm.FormShow(Sender: TObject);var ini:TIniFile; name:string;begin //实现动态提取数据库的登录用户名 ...
- 安卓平分位置layout_weight学习记录
weight (权重) 使用把layout_width写成0 weight 为平分剩余父容器位置 两个标签平分 <?xml version="1.0" encoding ...
- POJ3616:Milking Time
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5682 Accepted: 2372 Desc ...
- centos-6更新yum源(163)
更新前请先备份原来的repo文件,养成好习惯 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak 到http://mirrors ...
- Python练习题3
1.九九乘法表 li = [1,2,3,4,5,6,7,8,9] for i in li: for j in li: if i >= j: print(i,'*',j,'=',i*j,end=& ...
- Python 实现类似range函数
需求:写一个属于你自己的 frange函数,frange与range类似,一样的参数规则,但是每一项必须要是float类型 实现: 注意点,如何判断stop是否有参数传入,这里使用空字符判断,如fra ...
- 四十七、在SAP中,把功能区块整合成一个函数,通过调用函数的办法使代码简洁明了
一.我们查看上一次的代码,非常之凌乱,大体可以分为以下这几个区块 二.我们把最后的2个部分,用函数的方式来写,写法如下: 三.执行程序,和之前一样 四.输出结果
- jquery实现搜索框从中间向两边扩展(左右放大)
显示效果: 隐藏效果: 前端核心代码如下: <div class="search-icon col-md-2 col-sm-2 col-xs-4 col-md-offset-5 col ...
- POJ 3295:Tautology
Tautology Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10482 Accepted: 3982 Descri ...