您的位置:首页 > 其它

BZOJ 1263: [SCOI2006]整数划分( 高精度 )

2015-09-03 11:40 295 查看


yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了

---------------------------------------------------------------------------------

#include<bits/stdc++.h> using namespace std; struct INT { static const int MAXN = 8000; int s[MAXN], N; INT(int _N = 0) { N = _N; memset(s, 0, sizeof s); } INT operator * (const INT &o) { INT ret(N + o.N - 1); for(int i = 0; i < N; i++) for(int j = 0; j < o.N; j++) ret.s[i + j] += s[i] * o.s[j]; for(int i = 0; i < ret.N; i++) if(ret.s[i] > 9) { ret.s[i + 1] += ret.s[i] / 10; ret.s[i] %= 10; } for(; ret.s[ret.N]; ret.N++) if(ret.s[ret.N] > 9) { ret.s[ret.N + 1] += ret.s[ret.N] / 10; ret.s[ret.N] %= 10; } return ret; } INT operator = (int x) { for(N = 0; x; x /= 10) s[N++] = x % 10; return *this; } INT operator = (const INT &o) { N = o.N; for(int i = 0; i < N; i++) s[i] = o.s[i]; return *this; } INT operator *= (const INT &o) { return (*this = *this * o); } void read() { N = 0; char c = getchar(); for(; !isdigit(c); c = getchar()); for(; isdigit(c); c = getchar()) s[N++] = c - '0'; for(int l = 0,r = N - 1; l < r; l++, r--) swap(s[l], s[r]); } void write() { printf("%d\n", N); int t = N, cnt = 0; for(; cnt < 100 && t--; cnt++) printf("%d", s[t]); }} N; INT power(INT x, int k) { INT ans; ans = 1; for(; k; k >>= 1) { if(k & 1) ans *= x; x *= x; } return ans;} int main() { int n; scanf("%d", &n); int t = n / 3; if(n % 3 == 1) t--; N = 3; N = power(N, t); if(3 * t < n) { INT T; T = n - 3 * t; (T * N).write(); } else N.write(); return 0;}---------------------------------------------------------------------------------

1263: [SCOI2006]整数划分

Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 907 Solved: 452
[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

13

Sample Output

3
108

HINT

Source

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: