zoukankan      html  css  js  c++  java
  • 1002: [FJOI2007]轮状病毒

    1002: [FJOI2007]轮状病毒

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 2609  Solved: 1450
    [Submit][Status]

    Description

    给定n(N<=100),编程计算有多少个不同的n轮状病毒。

    Input

    第一行有1个正整数n。

    Output

    将编程计算出的不同的n轮状病毒数输出

    Sample Input

    3

    Sample Output

    16

    HINT

     

    Source

     题解:这道题可以采用“打表—找规律”战术——通过打表可以发现1,5,16,45,121,320,841,2205。。。。然后奇数项1=12,16=42,121=112,841=292,得到另一个序列——1、4、11、29,且11=3×4-1,29=3×11-4,即A1=1,A2=4,Ai=3*Ai-1-Ai-2,所以奇数项规律Finished。。。然后偶数项,将数字除以5,得到1=12,9=32,64=82,规律和上面的一样,只不过A2不一样,然后别的没了,直接高精度。。。(呵呵0ms Accept我也是醉了,代码略长求不鄙视TT)
     
      1 var
      2         i,j,k,l,m,n:longint;
      3         a,b,c:array[0..1000] of longint;
      4 begin
      5         readln(n);
      6         if odd(n) then
      7                 begin
      8                         n:=(n+1) div 2;
      9                         if n<=2 then
     10                                 begin
     11                                         if n=1 then writeln(1) else writeln(16);
     12                                 end
     13                         else
     14                                 begin
     15                                         a[1]:=1;
     16                                         a[0]:=1;
     17                                         b[1]:=4;
     18                                         b[0]:=1;
     19                                         for i:=3 to n do
     20                                                 begin
     21                                                         if odd(i) then
     22                                                                 begin
     23                                                                         k:=0;
     24                                                                         c[0]:=b[0]+1;
     25                                                                         for j:=1 to c[0] do
     26                                                                                 begin
     27                                                                                         k:=k+b[j]*3;
     28                                                                                         c[j]:=k mod 10;
     29                                                                                         k:=k div 10;
     30                                                                                 end;
     31                                                                         for j:=1 to c[0] do
     32                                                                                 begin
     33                                                                                         c[j]:=c[j]-a[j];
     34                                                                                         if c[j]<0 then
     35                                                                                                 begin
     36                                                                                                         dec(c[j+1]);
     37                                                                                                         c[j]:=c[j]+10;
     38                                                                                                 end;
     39                                                                                 end;
     40                                                                         while c[c[0]]=0 do dec(c[0]);
     41                                                                         a[0]:=c[0];
     42                                                                         for j:=1 to a[0] do
     43                                                                                 a[j]:=c[j];
     44                                                                 end
     45                                                         else
     46                                                                 begin
     47                                                                         k:=0;
     48                                                                         c[0]:=a[0]+1;
     49                                                                         for j:=1 to c[0] do
     50                                                                                 begin
     51                                                                                         k:=k+a[j]*3;
     52                                                                                         c[j]:=k mod 10;
     53                                                                                         k:=k div 10;
     54                                                                                 end;
     55                                                                         for j:=1 to c[0] do
     56                                                                                 begin
     57                                                                                         c[j]:=c[j]-b[j];
     58                                                                                         if c[j]<0 then
     59                                                                                                 begin
     60                                                                                                         dec(c[j+1]);
     61                                                                                                         c[j]:=c[j]+10;
     62                                                                                                 end;
     63                                                                                 end;
     64                                                                         while c[c[0]]=0 do dec(c[0]);
     65                                                                         b[0]:=c[0];
     66                                                                         for j:=1 to b[0] do
     67                                                                                 b[j]:=c[j];
     68                                                                 end;
     69                                                 end;
     70                                         if odd(n) then
     71                                                 begin
     72                                                         c[0]:=a[0];
     73                                                         for i:=a[0] downto 1 do
     74                                                                 c[i]:=a[i];
     75                                                 end
     76                                         else
     77                                                 begin
     78                                                         c[0]:=c[0];
     79                                                         for i:=b[0] downto 1 do
     80                                                                 c[i]:=b[i];
     81                                                 end;
     82                                         fillchar(a,sizeof(a),0);
     83                                         a[0]:=c[0]*2;
     84                                         for i:=1 to c[0] do
     85                                                 begin
     86                                                         for j:=1 to c[0] do
     87                                                                 begin
     88                                                                         a[i+j-1]:=a[i+j-1]+c[i]*c[j];
     89                                                                         a[i+j]:=a[i+j]+(a[i+j-1] div 10);
     90                                                                         a[i+j-1]:=a[i+j-1] mod 10;
     91                                                                 end;
     92                                                 end;
     93                                         while a[a[0]]=0 do dec(a[0]);
     94                                         for i:=a[0] downto 1 do
     95                                                 write(a[i]);
     96                                         writeln;
     97                                 end;
     98                 end
     99         else
    100                 begin
    101                         n:=n div 2;
    102                         if n<=2 then
    103                                 begin
    104                                         if n=1 then writeln(5) else writeln(45);
    105                                 end
    106                         else
    107                                 begin
    108                                         a[0]:=1;
    109                                         a[1]:=1;
    110                                         b[0]:=1;
    111                                         b[1]:=3;
    112                                         for i:=3 to n do
    113                                                 begin
    114                                                         if odd(i) then
    115                                                                 begin
    116                                                                         k:=0;
    117                                                                         c[0]:=b[0]+1;
    118 
    119                                                                         for j:=1 to c[0] do
    120                                                                                 begin
    121                                                                                         k:=k+b[j]*3;
    122                                                                                         c[j]:=k mod 10;
    123                                                                                         k:=k div 10;
    124                                                                                 end;
    125                                                                         for j:=1 to c[0] do
    126                                                                                 begin
    127                                                                                         c[j]:=c[j]-a[j];
    128                                                                                         if c[j]<0 then
    129                                                                                                 begin
    130                                                                                                         dec(c[j+1]);
    131                                                                                                         c[j]:=c[j]+10;
    132                                                                                                 end;
    133                                                                                 end;
    134                                                                         while c[c[0]]=0 do dec(c[0]);
    135                                                                         a[0]:=c[0];
    136                                                                         for j:=1 to a[0] do
    137                                                                                 a[j]:=c[j];
    138                                                                 end
    139                                                         else
    140                                                                 begin
    141                                                                         k:=0;
    142                                                                         c[0]:=a[0]+1;
    143 
    144                                                                         for j:=1 to c[0] do
    145                                                                                 begin
    146                                                                                         k:=k+a[j]*3;
    147                                                                                         c[j]:=k mod 10;
    148                                                                                         k:=k div 10;
    149                                                                                 end;
    150                                                                         for j:=1 to c[0] do
    151                                                                                 begin
    152                                                                                         c[j]:=c[j]-b[j];
    153                                                                                         if c[j]<0 then
    154                                                                                                 begin
    155                                                                                                         dec(c[j+1]);
    156                                                                                                         c[j]:=c[j]+10;
    157                                                                                                 end;
    158                                                                                 end;
    159                                                                         while c[c[0]]=0 do dec(c[0]);
    160                                                                         b[0]:=c[0];
    161                                                                         for j:=1 to b[0] do
    162                                                                                 b[j]:=c[j];
    163                                                                 end;
    164                                                 end;
    165                                         if odd(n) then
    166                                                 begin
    167                                                         c[0]:=a[0];
    168                                                         for i:=1 to c[0] do
    169                                                                 c[i]:=a[i];
    170                                                 end
    171                                         else
    172                                                 begin
    173                                                         c[0]:=b[0];
    174                                                         for i:=1 to c[0] do
    175                                                                 c[i]:=b[i];
    176                                                 end;
    177                                         fillchar(a,sizeof(a),0);
    178                                         a[0]:=2*C[0];
    179                                         for i:=1 to c[0] do
    180                                                 for j:=1 to c[0] do
    181                                                         begin
    182                                                                 a[i+j-1]:=a[i+j-1]+c[i]*c[j];
    183                                                                 a[i+j]:=a[i+j]+(a[i+j-1] div 10);
    184                                                                 a[i+j-1]:=a[i+j-1] mod 10;
    185                                                         end;
    186                                         while a[a[0]]=0 do dec(a[0]);
    187                                         k:=0;
    188                                         for i:=1 to a[0] do
    189                                                 begin
    190                                                         k:=k+a[i]*5;
    191                                                         a[i]:=k mod 10;
    192                                                         k:=k div 10;
    193                                                 end;
    194                                         while k>0 do
    195                                                 begin
    196                                                         inc(a[0]);
    197                                                         a[a[0]]:=k mod 10;
    198                                                         k:=k div 10;
    199                                                 end;
    200                                         for i:=a[0] downto 1 do
    201                                                 write(a[i]);
    202                                         writeln;
    203                                 end;
    204                 end;
    205 end.
  • 相关阅读:
    [題解]51nod_1515_明辨是非
    任务调度问题(贪心) hdu4864
    B站学习记:贪心与博弈
    poj1505(二分+贪心)
    温故知新:互质排列
    Radar Installation(利用数据有序化进行贪心选择)
    Wooden Sticks(贪心)
    计算a除b的第一位小数 in C++.
    龙龙的暑假贪心算法大冒险
    HDU-2037(贪心)
  • 原文地址:https://www.cnblogs.com/HansBug/p/4172938.html
Copyright © 2011-2022 走看看