179 条题解
- 
  0liyinghaowei LV 10 @ 2014-07-06 22:13:13 终于ac 
 要把1和2都分析到
 我就这样98
- 
  0@ 2014-07-06 22:12:27program p1033; 
 var
 a:array[1..350]of longint;
 c,n,i:longint;
 begin
 readln(n);
 if n=1 then begin writeln(1);halt;end;
 if n=2 then begin writeln(2);halt;end;
 c:=1;
 case n mod 3 of
 0:a[1]:=1;
 1:begin n:=n-4; a[1]:=4; end;
 2:begin n:=n-2; a[1]:=2; end;
 end;
 repeat
 n:=n-3;
 for i:=1 to c do
 a[i]:=a[i]*3;
 for i:=1 to c do
 begin
 a[i+1]:=a[i+1]+a[i]div 10;
 a[i]:=a[i]mod 10;
 end;
 if a[c+1]>0 then inc(c);
 until n=0;
 for i:=c downto 1 do
 write(a[i]);
 end.
- 
  0@ 2014-02-01 11:25:07其实很简单,数学题而已 
 对于这道题,记得小学奥赛做过,
 要得到最大值就要**把n尽量拆成3,但是如果拆到最后发现只剩下1的时候应当拿出一个3和剩下的1凑成4**(当然凑成之后可以分成2+2但是不影响结果)
 所以m的值和好确定
 a%3
 0:m=3^(n/3);
 1:m=3^(n/3-1)*4
 2:m=3^(n/3)*2
 剩下的就简单了,只过了几个点?
 谁叫你这么急,要知道n=1500,m=3^500,早就爆了最大的long long了.高精度是肯定的,而且算次方肯定要快速幂呀(虽然不快速幂也能过).
 什么还是没过,那是因为有特俗情况1一下是本人代码,代码基本给予麦森数(麦森数是基于高精度乘加了个快速幂)改了一下main的调用和输出函数 #include<stdio.h> 
 #include<string.h>
 #include<stdlib.h>
 #include<math.h>
 #define M 10
 #define N 250
 typedef int big[250];
 void base_big(void *a)
 {
 memset(a,0,sizeof(big));
 }
 void smlt(int *r,int b,int *a,int n)
 {
 int static i;
 for (i = 0;i < n-1;i++) {
 *(r+i) += *(a+i)*b;
 *(r+i+1) += *(r+i)/M;
 *(r+i) %= M;
 }
 if (i < n) (r+i) = ((a+i)*b+*(r+i))%M;
 }
 void mlt(int *r,int *b,int a)
 {
 int static j;
 base_big(r);
 for (j = 0;j < N;j++) smlt(r+j,(b+j),a,N-j);
 }
 void init_big(int *a)
 {
 char s[N+1];
 int i,l;
 scanf("%s",s); l = strlen(s)-1;
 base_big(a);
 for (i = l;i >= 0;i--) *(a+l-i) = s[i]-'0';
 }
 void print(big *a)
 {
 int i;
 for (i = N-1;i > 0;i--) if ((*a)[i]) break; printf("%d",(*a)[i]);
 for (i--;i >= 0;i--) printf("%d",(*a)[i]);
 }
 big tmp;
 void power(int *r,int *a,int n)
 {
 if (n == 0) {
 base_big(r);
 *r = 1;
 return;
 }
 if (n == 1) {
 memcpy(r,a,sizeof(big)); return;
 } else if (n&1) {
 power(r,a,n>>1);
 mlt(tmp,r,r);
 mlt(r,tmp,a);
 } else {
 power(r,a,n>>1);
 mlt(tmp,r,r);
 memcpy(r,tmp,sizeof(big));
 }
 }
 int main()
 {
 big a,c,cc;
 int n;
 base_big(&a); a[0] = 3;
 base_big(&cc);
 scanf("%d",&n);
 if (n <= 3)
 printf("%d",n); else
 switch (n%3) {
 case 1:
 power(c,a,n/3-1);
 cc[0] = 4;
 mlt(a,c,cc);
 print(&a);
 break;
 case 2:
 power(c,a,n/3);
 cc[0] = 2;
 mlt(a,c,cc);
 print(&a);
 break;
 case 0:
 power(c,a,n/3);
 print(&c);
 break;
 }
 return 0;
 }
- 
  0@ 2013-10-22 23:06:18高精+DP 
 f[1]=1, f[2]=2, f[3]=3
 f[n]=max{2*f[n-2], 3*f[n-3]} (n>=4)
- 
  0@ 2013-10-09 21:41:32- 没啥,高精度计算 *39数据是1,被坑死了,要特判 ###Block Code #include<iostream> #include<cstdio>
 using namespace std; class hugeint 
 {
 public:
 int a[1001],n;
 void init()
 {
 n=1;
 a[1]=1;
 }
 void print()
 {
 while(a[n]==0)n--;
 for(int i=n;i>=1;i--){
 cout<<a[i];
 }
 cout<<endl;
 }
 friend hugeint operator*(hugeint a,int b)
 {
 hugeint c;
 int gw=0;
 for(int i=1;i<=a.n;i++){
 c.a[i]=a.a[i]*b+gw;
 gw=c.a[i]/10;
 c.a[i]%=10;
 }
 c.n=a.n;
 while(gw>0){
 c.a[++c.n]=gw%10;
 gw/=10;
 }
 return c;
 }
 };int main() 
 {hugeint a; 
 a.init();
 int n;
 cin>>n;
 if(n==1){
 cout<<1<<endl;
 return 0;
 }
 if(n%3==1){
 a=a*4;
 n-=4;
 }
 if(n%3==2){
 a=a*2;
 n-=2;
 }
 for(int i=1;i<=n/3;i++){
 a=a*3;
 }
 // cout<<a.n<<endl;
 a.print();
 return 0;
 }
- 
  0@ 2013-10-03 15:29:48一上来没考虑数据大小啊,跪了一下。然后调整了一下没什么问题了。一个数字最差情况也是1,所以先默认1。往上面乘。输入大于2且不等于4时乘3,然后让输入的数据-3继续循环。如果不符条件了看是不是大于1,大于就乘2,让输入-2。减下来要么剩1要么剩0,都不用考虑。高精那块懒得写函数了,复制黏贴了三遍。 C++ Code: 
 #include <iostream>
 using namespace std;int main(){ 
 int a;
 int result[300];for(int i=0;i<=299;i++){ 
 result[i]=0;
 }result[0]=1; 
 cin>>a;while(a>=3 && a!=4){ 
 int temp[300];
 for(int i=0;i<=299;i++){
 temp[i]=result[i];
 }
 for(int i=0;i<=299;i++){
 result[i]+=temp[i];
 if(result[i]>=10){
 result[i]-=10;
 result[i+1]+=1;
 }
 }for(int i=0;i<=299;i++){ 
 result[i]+=temp[i];
 if(result[i]>=10){
 result[i]-=10;
 result[i+1]+=1;
 }
 }
 a -=3;
 }while(a>1){ 
 int temp[300];
 for(int i=0;i<=299;i++){
 temp[i]=result[i];
 }
 for(int i=0;i<=299;i++){
 result[i]+=temp[i];
 if(result[i]>=10){
 result[i]-=10;
 result[i+1]+=1;
 }
 }a-=2; 
 }int start=0; 
 for(int i=299;i>=0;i--){
 if(result[i]!=0){
 start=i;
 break;
 }} 
 for (int i=start;i>=0;i--){
 cout<<result[i];
 }} 
- 
  0@ 2013-08-07 23:48:24当然,高精度的部分最好用函数来解决。鄙人这个地方没有优化,程序可读性有所下降 
- 
  0@ 2013-08-07 23:47:44#include<iostream> 
 #include<string>
 #include<cstring>using namespace std; int main(){ 
 int a[1001] = {0}, w[1001], n;
 cin >> n;
 if (n == 1)
 {
 cout << 1 << endl;
 return 0;
 }
 a[1] = 1;
 memset(w, 0, sizeof(w));
 int rmndr = n % 3, qtnt;
 //cout << "REMINDER = " << rmndr << endl;
 if (rmndr == 0)
 {
 qtnt = n / 3;
 //cout << "QUOTIENT = " << qtnt << endl;
 for (int i = 1; i <= qtnt; i ++)
 {
 memset(w, 0, sizeof(w));
 for (int j = 1; j <= 1000; j ++)
 {
 a[j] = a[j] * 3 + w[j - 1];
 w[j] = a[j] / 10;
 a[j] %= 10;
 }
 }
 int p = 900;
 while (a[p] == 0)p --;
 //cout << "MULTIPLE = ";
 for (int i = p; i >= 1; i --)cout << a[i];
 }
 else if (rmndr == 1)
 {
 qtnt = n / 3;
 //cout << "QUOTIENT = " << qtnt << endl;
 qtnt -= 1;
 for (int i = 1; i <= qtnt; i ++)
 {
 memset(w, 0, sizeof(w));
 for (int j = 1; j <= 1000; j ++)
 {
 a[j] = a[j] * 3 + w[j - 1];
 w[j] = a[j] / 10;
 a[j] %= 10;
 }
 }
 for (int i = 1; i <= 1000; i ++)
 {
 a[i] = a[i] * 4 + w[i - 1];
 w[i] = a[i] / 10;
 a[i] %= 10;
 }
 int p = 900;
 while (a[p] == 0)p --;
 //cout << "MULTIPLE = ";
 for (int i = p; i >= 1; i --)cout << a[i];
 }
 else if (rmndr = 2)
 {
 qtnt = n / 3;
 //cout << "QUOTIENT = " << qtnt << endl;
 for (int i = 1; i <= qtnt; i ++)
 {
 memset(w, 0, sizeof(w));
 for (int j = 1; j <= 1000; j ++)
 {
 a[j] = a[j] * 3 + w[j - 1];
 w[j] = a[j] / 10;
 a[j] %= 10;
 }
 }
 for (int i = 1; i <= 1000; i ++)
 {
 a[i] = a[i] * 2 + w[i - 1];
 w[i] = a[i] / 10;
 a[i] %= 10;
 }
 int p = 900;
 while (a[p] == 0)p --;
 //cout << "MULTIPLE = ";
 for (int i = p; i >= 1; i --)cout << a[i];
 }
 return 0;
 }
 一定要注意n=1的情况!可以看到在程序的最前面我做了一个处理:n=1时输出1直接退出。
 被n=1坑的够惨,第一次49个点中48个正确,WA一个,结果n=1。。。后来AC了
- 
  0@ 2013-07-17 19:58:26#include<stdio.h> 
 #include<stdlib.h>
 static int array[3000];
 void jingwei()
 {
 int k;
 int i;
 int j;
 for(i=0;i<3000;i++)
 {
 if(array[i]>9)
 {
 k=array[i]/10;
 array[i]=array[i]%10;
 array[i+1]=array[i+1]+k;
 }
 }
 }
 void chengfa(int n)
 {
 int i;
 for(i=0;i<3000;i++)
 {
 array[i]=array[i]*n;
 }
 }
 int main()
 {
 int n,i,j,k;
 scanf("%d",&n);
 array[0]=1;
 if(n%3==1)
 {
 k=n/3;
 for(i=0;i<k-1;i++)
 {
 chengfa(3);
 jingwei();
 }
 chengfa(4);
 jingwei();
 }
 if(n%3==2)
 {
 k=n/3;
 for(i=0;i<k;i++)
 {
 chengfa(3);
 jingwei();
 }
 chengfa(2);
 jingwei();
 }
 if(n%3==0)
 {
 k=n/3;
 for(i=0;i<k;i++)
 {
 chengfa(3);
 jingwei();
 }
 }
 j=3000;
 int flag=1;
 while(flag)
 {
 j--;
 if(array[j]!=0)flag=0;
 }
 if(n==1)printf("1");
 else for(i=j;i>=0;i--)
 printf("%d",array[i]);
 return 0;
 }
 要考虑1的时候不能直接乘4。。。
- 
  0@ 2013-04-24 20:43:48要细心 
 program p1033;
 var m:longint;
 n:string;
 procedure getdata;
 begin
 readln(m);
 end;
 procedure multiply(n:integer;var s:string);
 var a:array[1..500] of integer;
 i,leng:longint;
 begin
 leng:=length(s);
 fillchar(a,sizeof(a),0);
 for i:=1 to length(s) do
 a[length(s)-i+1]:=ord(s[i])-ord('0');
 for i:=1 to length(s) do
 a[i]:=a[i]*n;
 for i:=1 to length(s) do
 if a[i]>=10 then
 begin
 a[i+1]:=a[i+1]+(a[i] div 10);
 a[i]:=a[i] mod 10;
 end;
 s:='';
 if a[leng+1]>0 then
 for i:=leng+1 downto 1 do
 s:=s+chr(a[i]+ord('0'))
 else
 for i:=leng downto 1 do
 s:=s+chr(a[i]+ord('0'));end; 
 procedure output;
 begin
 writeln(n);
 end;
 function judge(s:longint):longint;
 begin
 if (s=1)or(s=2)or(s=3) then
 judge:=s-1
 else begin
 judge:=(s mod 3)+3;
 end;
 end;
 procedure calc(s:longint;var n:string);
 var i:longint;
 begin
 n:='1';
 case judge(s) of
 0:n:='1';
 1:n:='2';
 2:n:='3';
 3:begin
 for i:=1 to (s div 3) do
 multiply(3,n);
 end;
 4:begin
 for i:=1 to ((s div 3)-1) do
 multiply(3,n);
 for i:=1 to 2 do
 multiply(2,n);
 end;
 5:begin
 for i:=1 to (s div 3) do
 multiply(3,n);
 multiply(2,n);
 end;
 end;
 end;
 begin
 getdata;
 calc(m,n);
 output;
 end.
 测试数据 #0: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #1: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #2: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #3: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #4: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #5: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #6: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #7: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #8: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #9: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #10: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #11: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #12: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #13: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #14: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #15: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #16: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #17: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #18: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #19: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #20: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #21: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #22: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #23: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #24: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #25: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #26: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #27: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #28: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #29: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #30: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #31: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #32: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #33: Accepted, time = 2 ms, mem = 632 KiB, score = 2
 测试数据 #34: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #35: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #36: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #37: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #38: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #39: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #40: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #41: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #42: Accepted, time = 0 ms, mem = 632 KiB, score = 2
 测试数据 #43: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #44: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #45: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #46: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #47: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #48: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 测试数据 #49: Accepted, time = 3 ms, mem = 632 KiB, score = 2
 Accepted, time = 141 ms, mem = 632 KiB, score = 100
 有几位神犇0ms 过的 求指教
- 
  0@ 2013-02-16 10:14:57
- 
  0@ 2012-11-05 17:13:19Var 
 i,j,k,m,n:Longint;
 ans:Int64;
 Begin
 Read(n);
 ans:=1;
 While n-3>1 Do
 Begin
 ans:=ans*3;
 n:=n-3;
 End;
 If n=4 Then Writeln(ans*4);
 If n=3 Then Writeln(ans*3);
 If n=2 Then Writeln(ans*2);End. 
- 
  0@ 2012-10-17 09:21:12http://user.qzone.qq.com/1304445713/blog/1350436781 完整证明过程及C++高精度类代码。 
 空间不设访问权限,没有烦人的登录动画。
 最近努力写各个OJ的题解,虽然都是些基础向的题目。
 欢迎大家光临~
- 
  0@ 2009-11-11 16:30:44大家都知道,如果这题分解个数可以为实数(比较抽象)且不一定分解成整数的话,那么分出(n/e)个e是最优解 
 证明略..有兴趣的同学不妨自己推导一番.
 e=2.718281828..
 显然它比较靠近3,对比可知3越多越好,但是分解个数是整数,所以还要考虑分配平均的问题,这样不难得到下面大牛们的证明.
- 
  0@ 2009-11-07 16:38:27编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ├ 测试数据 11:答案正确... 0ms
 ├ 测试数据 12:答案正确... 0ms
 ├ 测试数据 13:答案正确... 0ms
 ├ 测试数据 14:答案正确... 0ms
 ├ 测试数据 15:答案正确... 0ms
 ├ 测试数据 16:答案正确... 0ms
 ├ 测试数据 17:答案正确... 0ms
 ├ 测试数据 18:答案正确... 0ms
 ├ 测试数据 19:答案正确... 0ms
 ├ 测试数据 20:答案正确... 0ms
 ├ 测试数据 21:答案正确... 0ms
 ├ 测试数据 22:答案正确... 0ms
 ├ 测试数据 23:答案正确... 0ms
 ├ 测试数据 24:答案正确... 0ms
 ├ 测试数据 25:答案正确... 0ms
 ├ 测试数据 26:答案正确... 0ms
 ├ 测试数据 27:答案正确... 0ms
 ├ 测试数据 28:答案正确... 0ms
 ├ 测试数据 29:答案正确... 0ms
 ├ 测试数据 30:答案正确... 0ms
 ├ 测试数据 31:答案正确... 0ms
 ├ 测试数据 32:答案正确... 0ms
 ├ 测试数据 33:答案正确... 0ms
 ├ 测试数据 34:答案正确... 0ms
 ├ 测试数据 35:答案正确... 0ms
 ├ 测试数据 36:答案正确... 0ms
 ├ 测试数据 37:答案正确... 0ms
 ├ 测试数据 38:答案正确... 0ms
 ├ 测试数据 39:答案正确... 0ms
 ├ 测试数据 40:答案正确... 0ms
 ├ 测试数据 41:答案正确... 0ms
 ├ 测试数据 42:答案正确... 0ms
 ├ 测试数据 43:答案正确... 0ms
 ├ 测试数据 44:答案正确... 0ms
 ├ 测试数据 45:答案正确... 0ms
 ├ 测试数据 46:答案正确... 0ms
 ├ 测试数据 47:答案正确... 0ms
 ├ 测试数据 48:答案正确... 0ms
 ├ 测试数据 49:答案正确... 0ms
 ├ 测试数据 50:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0ms
- 
  0@ 2009-11-06 22:58:45编译通过... 
 ├ 测试数据 01:答案正确... 0ms
 ├ 测试数据 02:答案正确... 0ms
 ├ 测试数据 03:答案正确... 0ms
 ├ 测试数据 04:答案正确... 0ms
 ├ 测试数据 05:答案正确... 0ms
 ├ 测试数据 06:答案正确... 0ms
 ├ 测试数据 07:答案正确... 0ms
 ├ 测试数据 08:答案正确... 0ms
 ├ 测试数据 09:答案正确... 0ms
 ├ 测试数据 10:答案正确... 0ms
 ├ 测试数据 11:答案正确... 0ms
 ├ 测试数据 12:答案正确... 0ms
 ├ 测试数据 13:答案正确... 0ms
 ├ 测试数据 14:答案正确... 0ms
 ├ 测试数据 15:答案正确... 0ms
 ├ 测试数据 16:答案正确... 0ms
 ├ 测试数据 17:答案正确... 0ms
 ├ 测试数据 18:答案正确... 0ms
 ├ 测试数据 19:答案正确... 0ms
 ├ 测试数据 20:答案正确... 0ms
 ├ 测试数据 21:答案正确... 0ms
 ├ 测试数据 22:答案正确... 0ms
 ├ 测试数据 23:答案正确... 0ms
 ├ 测试数据 24:答案正确... 0ms
 ├ 测试数据 25:答案正确... 0ms
 ├ 测试数据 26:答案正确... 0ms
 ├ 测试数据 27:答案正确... 0ms
 ├ 测试数据 28:答案正确... 0ms
 ├ 测试数据 29:答案正确... 0ms
 ├ 测试数据 30:答案正确... 0ms
 ├ 测试数据 31:答案正确... 0ms
 ├ 测试数据 32:答案正确... 0ms
 ├ 测试数据 33:答案正确... 0ms
 ├ 测试数据 34:答案正确... 0ms
 ├ 测试数据 35:答案正确... 0ms
 ├ 测试数据 36:答案正确... 0ms
 ├ 测试数据 37:答案正确... 0ms
 ├ 测试数据 38:答案正确... 0ms
 ├ 测试数据 39:答案正确... 0ms
 ├ 测试数据 40:答案正确... 0ms
 ├ 测试数据 41:答案正确... 0ms
 ├ 测试数据 42:答案正确... 0ms
 ├ 测试数据 43:答案正确... 0ms
 ├ 测试数据 44:答案正确... 0ms
 ├ 测试数据 45:答案正确... 0ms
 ├ 测试数据 46:答案正确... 0ms
 ├ 测试数据 47:答案正确... 0ms
 ├ 测试数据 48:答案正确... 0ms
 ├ 测试数据 49:答案正确... 0ms
 ├ 测试数据 50:答案正确... 0ms
 ---|---|---|---|---|---|---|---|-
 Accepted 有效得分:100 有效耗时:0ms虽然是因为数据弱 
 但还是一个字:爽
- 
  0@ 2009-11-04 19:13:42同一个程序叫了两遍就AC了......... 
 那个超时得点怎么解决
 虽然过了但是总觉得很猥琐.......
- 
  0@ 2009-11-01 13:50:41http://hi.baidu.com/lehrlukas/blog/item/6bbb88fc9d8f571c08244d31.html 
 除了1要特殊判别一下,其它数据看除以3余几,就有余数个2,其余全是3.然后一个高精度乘法搞定。至于为什么这样最大,这里有人证明过了。粘一下,不介意吧?
 (song19931218的证明)
 经典的数学题:
 若将N分解成以下形式:
 N=x1+x2+...+xk;
 首先证明:
 x(i)
- 
  0@ 2009-10-31 14:37:13一星半纪念题 
- 
  0@ 2009-10-29 16:27:46我数学太弱了..参照大牛的方法过了..ToT..!!! 
 program vijos1033;
 type bignum=array[0..1000]of integer;
 var n,ans,rem:integer;
 a:bignum;function mul(a:bignum;b:integer):bignum; 
 var i,x:integer;
 begin
 i:=1; x:=0;
 for i:=1 to a[0] do
 begin
 x:=x+a[i]*b;
 a[i]:=x mod 10;
 x:=x div 10;
 end;
 while x>0 do
 begin
 inc(i);
 a[i]:=x mod 10;
 x:=x div 10;
 end;
 a[0]:=i;
 mul:=a;
 end;function fang(a:bignum;b:integer):bignum; 
 var i:integer;
 begin
 for i:=1 to b do
 a:=mul(a,3);
 fang:=a;
 end;begin 
 readln(n); a[0]:=1; a[1]:=1;
 if n=1 then begin write(1); exit; end;
 ans:=n div 3; rem:=n mod 3;
 case rem of
 0:a:=fang(a,ans);
 1:a:=mul(fang(a,ans-1),4);
 2:a:=mul(fang(a,ans),2);
 end;
 for n:=a[0] downto 1 do
 write(a[n]);
 end.