聪聪是一个善良可爱、睿智聪慧的好孩子。聪聪喜欢看书,这一天她在看一本书时看到了这样一个问题:给你一个正整数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. HFS远程命令执行漏洞入侵抓鸡黑阔服务器

    先来科普一下: HFS是什么? hfs网络文件服务器 2.3是专为个人用户所设计的HTTP档案系统,如果您觉得架设FTP Server太麻烦,那么这个软件可以提供您更方便的网络文件传输系统,下载后无须 ...

  2. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  3. Windows10+Ubuntu双系统安装 (转)

    1.Windows10+Ubuntu双系统安装:   http://www.jianshu.com/p/2eebd6ad284d 2.UEFI启动模式安装ubuntu指南  :  http://col ...

  4. python习题 (1):login

    #!/uer/bin/env python # _*_ coding: utf-8 _*_ import sys retry_limit = 3 retry_count = 0 account_fil ...

  5. Rest(表述性状态转移)

    本文的主要内容有: 1.了解Rest 2.了解RESTful WebService 3.使用SpringMvc实现RESTful ------------------------------我是华丽的 ...

  6. python之常用内置函数

    python内置函数,可以通过python的帮助文档 Build-in Functions,在终端交互下可以通过命令查看 >>> dir("__builtins__&quo ...

  7. poj 2955 Brackets

    题目链接:http://poj.org/problem?id=2955 思路:括号匹配问题,求出所给序列中最长的可以匹配的长度(中间可以存在不匹配的)例如[(])]有[()]符合条件,长度为4 dp[ ...

  8. kettle系列-2.kettle源码结构分析

    kettle是一个开源产品,产品本身设计是很优秀的,代码应该是很多开源爱好者用业余时间贡献的,代码整体结构还是比较容易理解的,但具体到每一个控件内部就因人而异了,感觉还是挺复杂的,肯定别人考虑得比较全 ...

  9. Linux常用命令学习2---(文件搜索命令locate find、命令搜索命令whereis which、字符串搜索命令grep、帮助命令man)

     1.文件搜索命令:locate [文件名]    在后台数据库中按文件名搜索,搜索速度比find快,耗费资源更少    例子:locate test.txt,就会显示文件名包含 test.txt的所 ...

  10. XSS跨站点脚本攻击

    XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. 以下为Jav ...