聪聪是一个善良可爱、睿智聪慧的好孩子。聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数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. 如何给Apache添加虚拟路径和虚拟主机?

    在本地开发,一般只用一个Apache服务器,然后通过配置文件实现多个站点访问,要么是“虚拟路径(别名)”的形式,要么是“虚拟主机”的形式,相关配置参考如下: 说明:我给Apache设置的端口为:,即  ...

  2. PHP操作SQL Server 2008/2012

    PHP操作SQL Server驱动,微软官方提供2个版本,Version 2.0 和 Version 3.0 Version 2.0 版本支持的操作系统有: Windows Server 2003 S ...

  3. Swift3.0P1 语法指南——函数

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  4. EF Code First 常用命令

    1.Enable-Migrations  开启版本库 2. Add-Migration addname 新增版本 3.Update-Database –TargetMigration: addname ...

  5. JQuery实现图片轮播效果源码

    ======================整体结构======================== <div class="banner"> <ul class ...

  6. mysql存储过程学习

    一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...

  7. 生成解决方案,主项目的bin目录下没有其他项目生成的dll

    问题说明: 我的项目组成: 主项目为:TaskUtlity 在生成解决方案的时候在TaskUtlity的bin目录下老是找不到ProBonus项目生成的dll. 解决方案: 1.打开sln文件,找到P ...

  8. [转]MyEclipse 里查看jar文件源码

    在开发过程中,有时候需要查看jar文件的源码,这里讲解如何设置.  选中某一个jar文件,如我这里选中的是struts2-core-2.1.6.jar,然后右键-->Properties--&g ...

  9. 两个已排序数组进行合并后的第K大的值--进军硅谷

    我看到此题时,首先想到一个一个比较遍历过去,这是最暴力的方法,后面我想到了已经排序,那么对每个数组进行二分,然后比较这两个值.此书第三种解法,挺不错,只对那个长度较小的数组进行二分查找,保证i+j-1 ...

  10. javascript的window.ActiveXObject对象,区别浏览器的方法

    (window.ActiveXObject)的作用,用来判断浏览器是否支持ActiveX控件,如果支持ActiveX控件,我们可以利用var xml=new ActiveXObject("M ...