聪聪是一个善良可爱、睿智聪慧的好孩子。聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数n,你要将它分成若干个自然数Ai的和的形式,并且使得这若干个自然数Ai的乘积尽量大,并输出最大乘积。比如n=5的情况,最优的方案是5=2+3,答案为6。这么简单的问题聪聪当然会做了,她想考考你,你能不能比她先给出问题的答案呢?

【输入】
      输入文件名为reading.in 共1行,包含1个正整数n。
【输出】
      输出文件reading.out 共1行,包含1个整数,表示最大乘积。
【输入输出样例】
      reading.in/reading.out
      7

12

【数据范围】
      对于30%的数据,1≤n≤10。
      对于60%的数据,1≤n≤100。
      对于100%的数据,1≤n≤10000。

原文地址:http://www.cnblogs.com/scx2015noip-as-php/p/ccks.html

思路在上面那个之前的贴子网址说过了,上次我们遗留下一个问题,就是n=10000时,结果太大,所以我们要高精度。所以现在不多说,上高精度代码,核心代码和上次60分算法一样,剩下40分在这次代码里面用高精解决了。

#include<iostream>
#include<cstring>
using namespace std;
void multi(char *a,char *b)//这个函数用来高精度乘法,这里的指针用在函数里代入了数组
{
int x[2001],y[2001];
int s[2001]={0};
int lena=strlen(a),lenb=strlen(b);
int i,j,t;
for(i=0;i<=lena;i++) x[i]=a[lena-i-1]-'0';
for(i=0;i<=lenb;i++) y[i]=b[lenb-i-1]-'0';
for(i=0;i<lena;i++)
{
for(j=0;j<lenb;j++)
{
s[i+j]+=(x[i])*(y[j]);
if(s[i+j]>9)
{
s[i+j+1]+=s[i+j]/10;
s[i+j]%=10;
}
}
}
t=lena+lenb+2;
while(t>0 && s[t]==0) t--;
for(i=t;i>=0;i--) a[t-i]=s[i]+'0';
}
int main()
{
char a[2001]={0},b[2]={0},c[2]={0};//a数组设置2000位足够
long long n,ans=1;
itoa(3,b,10);//b设为3,在算法方面对a进行乘3工作
cin>>n;
if(n<=4) itoa(n,a,10);//这个if/else可以去了,下面的判断中n<=4时它的结果就自动是n了,不信可以试试
else
{
itoa(ans,a,10);//a设初值1
while(n>4)
{
n-=3;
multi(a,b);
}
if(n!=0){itoa(n,c,10);multi(a,c);}//把n转为字符数组c,然后a和c高精度乘法(等于之前那篇文章的m*n),和之前那篇文章思路等价
}
cout<<a;//a数组不必循环,可直接打出来
return 0;
}

c++聪聪看书(满分代码)的更多相关文章

  1. c++聪聪看书(低数据版代码)

    聪聪是一个善良可爱.睿智聪慧的好孩子.聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数n,你要将它分成若干个自然数Ai的和的形式,并且使得这若干个自然数Ai的乘积尽量大,并输出最大 ...

  2. BZOJ 1415 【NOI2005】 聪聪和可可

    题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...

  3. HYSBZ - 2152 聪聪和可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  4. C++之路进阶——bzoj2152(聪聪可可)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  hyxzc Logout 捐赠本站 Notice:由于本OJ建立在 ...

  5. BZOJ 2152: 聪聪可可 点分治

    2152: 聪聪可可 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php ...

  6. 洛谷 2634&&BZOJ 2152: 聪聪可可【点分治学习+超详细注释】

    2152: 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 3435  Solved: 1776[Submit][Status][Discuss ...

  7. BZOJ_2152_聪聪可可_点分治

    BZOJ_2152_聪聪可可_点分治 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)…… ...

  8. BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp

    题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  9. BZOJ2152[国家集训队]聪聪可可——点分治

    题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...

随机推荐

  1. 个性化设置phpMyAdmin,去掉“以树形显示数据库”,禁用“发送错误报告”

    个性化设置phpMyAdmin 在使用phpMyAdmin 3.5.8.2时,发现: 如果数据库有相同的前缀,左边数据库导航会把前缀合并,即所谓的“以树形显示数据库”,真的有点不习惯,如下图所示: 不 ...

  2. 一条代码解决各种IE浏览器兼容性问题

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 <!Doctype html> ...

  3. T-SQL 语句的优化

    SQL调优. 1.索引是数据库调优的最根本的优化方法.聚簇索引.非聚簇索引. 聚簇索引:物理序与索引顺序相同.(只能有一个) 非聚簇索引:物理顺序与索引顺序不相同. 2.调整WHERE 子句中的连接顺 ...

  4. win7 去快捷箭头

    去掉快捷方式箭头.reg   Windows Registry Editor Version 5.00   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...

  5. servlet 访问流程

  6. JVM内存管理------垃圾搜集器精解(让你在垃圾搜集器的世界里耍的游刃有余)

    引言 在上一章我们已经探讨过hotspot上垃圾搜集器的实现,一共有六种实现六种组合.本次LZ与各位一起探讨下这六种搜集器各自的威力以及组合的威力如何. 为了方便各位的观看与对比,LZ决定采用当初写设 ...

  7. md5 (c语言)

    /** * \file md5.h * * \brief MD5 message digest algorithm (hash function) * * Copyright (C) 2006-201 ...

  8. Yii 动作过滤的方法

    protected function _init() { } public function beforeAction($action) { //黑名单 $blackList = array('tes ...

  9. cisco-log

    每个日志消息被关联一个严重级别,用来分类消息的严重等级:数字越低,消息越严重.严重级别的范围从0(最高)到7(最低).  日志消息的严重级别,使用logging命令可以用数字或者名称来指定严重性.  ...

  10. PHP语句【变量、运算符表达式、语句】

    一.变量的方法.1.empty可以用empty的方法能够判断变量的值是不是为空.①如果我们看一下某一个变量是不是已经存在过了假如我们输出一下 var_dump (empty($a)); 返回值为tru ...