bzoj1263
2015-09-03 14:19
239 查看
这个问题之前看过。。。尽量拆成3。。
然后。。。高精度没有压位居然过了。。
View Code
Submit: 908 Solved: 453
[Submit][Status][Discuss]
108
然后。。。高精度没有压位居然过了。。
#include<bits/stdc++.h> #define lowbit(a) ((a)&(-(a))) #define clr(a,x) memset(a,x,sizeof(a)) #define rep(i,l,r) for(int i=l;i<(r);i++) typedef long long ll; using namespace std; int read() { char c=getchar(); int ans=0,f=1; while(!isdigit(c)){ if(c=='-') f=-1; c=getchar(); } while(isdigit(c)){ ans=ans*10+c-'0'; c=getchar(); } return ans*f; } int n,cnt,re,a[5009]; int main() { n=read(); cnt=n/3;re=n%3; if(re==1||!re){ re+=3; cnt--; } a[0]=1; rep(i,0,cnt){ rep(i,0,5009) a[i]*=3; rep(i,0,5008) if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10; } } rep(i,0,5009) a[i]*=re; rep(i,0,5008) if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10; } int l; for(int i=5008;~i;i--){ if(a[i]){ l=i; break; } } printf("%d\n",l+1); for(int i=l;~i&&l-i<100;i--) putchar('0'+a[i]); puts(""); return 0; }
View Code
1263: [SCOI2006]整数划分
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 908 Solved: 453
[Submit][Status][Discuss]
Description
从文件中读入一个正整数n(10≤n≤31000)。要求将n写成若干个正整数之和,并且使这些正整数的乘积最大。 例如,n=13,则当n表示为4+3+3+3(或2+2+3+3+3)时,乘积=108为最大。Input
只有一个正整数: n (10≤n≤31000)Output
第1行输出一个整数,为最大乘积的位数。 第2行输出最大乘积的前100位,如果不足100位,则按实际位数输出最大乘积。 (提示:在给定的范围内,最大乘积的位数不超过5000位)。Sample Input
13Sample Output
3108
HINT
Source
[Submit][Status][Discuss]相关文章推荐
- SQL通过出生日期获取年龄
- 2015半年总结—愿得菩提,心似琉璃
- 2015年终总结—愿得菩提,心似琉璃
- 使用nssm将STAF安装为windows系统服务
- 用分治法实现快排
- 你的数据库数据量上亿,为了提高效率,要分库还是分表?具体怎么做 - 开源中国社区
- Node爬虫
- leetCode #82 Remove Duplicates from Sorted List
- c++STL容器
- Win7/Win8.1升级Win10整体进度达到32%等各种安装失败的解决方法
- ubuntu内的工具更新及其安装
- C# Excel 生成图表,添加趋势线、误差线
- codeforces 251C C. Number Transformation(数论+dp)
- bzoj-3796 Mushroom追妹纸
- window下gitbase乱码和修改编辑器gvim
- MR案例:基站相关01
- js正则表达式()和$1...$9的理解和使用
- QT新建源文件模板修改
- 【Java EE 学习 33 下】【validate表单验证插件】
- 58同城mysql分库分表实践-沈剑 - 豆丁网