Hướng dẫn giải của Point Connection Game in a Circle


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

const fi='';
      fo='';
      base=1000000;
      digit=6;
      maxn=160;
type bignum=array[0..30] of longint;
var n:longint;
    a:array[0..maxn] of bignum;

procedure multi(i:longint);
var j,mem,t,x:longint;
begin
     mem:=0; x:=4*i-2;
     a[i,0]:=a[i-1,0];
     for j:=1 to a[i,0] do
     begin
          t:=a[i-1,j]*x+mem;
          a[i,j]:=t mod base;
          mem:=t div base;
     end;
     if mem>0 then
     begin
          inc(a[i,0]);
          a[i,a[i,0]]:=mem;
     end;
end;

procedure divide(i:longint);
var j,mem,x,k:longint;
    t:bignum;
begin
     mem:=0; k:=i+1;
     fillchar(t,sizeof(t),0);
     for j:=a[i,0] downto 1 do
     begin
          x:=a[i,j]+mem*base;
          if x<k then mem:=x
          else
          begin
               t[j]:=x div k;
               mem:=x mod k;
          end;
     end;
     for j:=a[i,0] downto 1 do
         if t[j]>0 then break;
     a[i,0]:=j;
     for j:=1 to a[i,0] do
         a[i,j]:=t[j];
end;

procedure init;
var i:longint;
begin
     a[0,0]:=1; a[0,1]:=1;
     for i:=1 to maxn do
     begin
          multi(i);
          divide(i);
     end;
end;

procedure wf(re:bignum);
var i,j,t:longint; s:string;
begin
     for i:=re[0] downto 1 do
     begin
          if i<re[0] then
          begin
               str(re[i],s);
               t:=length(s);
               for j:=t+1 to digit do write(0);
          end;
          write(re[i]);
     end;
     writeln;
end;


begin
     assign(input,fi);
     reset(input);
     assign(output,fo);
     rewrite(output);
     init;
     readln(n);
     while n<>-1 do
     begin
          wf(a[n]);
          readln(n);
     end;
     close(output);
     close(input);
end.

Code mẫu của happyboy99x

import java.math.BigInteger;
import java.io.*;

class MCIRGAME {
    public static void main(String argv[]) {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
            BigInteger C[] = new BigInteger[151];
            C[0] = BigInteger.ONE;
            for(int i = 0; i < 150; ++i)
                C[i+1] = C[i].multiply(BigInteger.valueOf(2*(2*i+1))).divide(BigInteger.valueOf(i+2));
            for(int n; (n = Integer.parseInt(in.readLine())) != -1; out.write(C[n].toString()), out.newLine());
            in.close(); out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Code mẫu của ladpro98

const   a:array[1..150] of string=('1',
'2',
'5',
'14',
'42',
'132',
'429',
'1430',
'4862',
'16796',
'58786',
'208012',
'742900',
'2674440',
'9694845',
'35357670',
'129644790',
'477638700',
'1767263190',
'6564120420',
'24466267020',
'91482563640',
'343059613650',
'1289904147324',
'4861946401452',
'18367353072152',
'69533550916004',
'263747951750360',
'1002242216651368',
'3814986502092304',
'14544636039226909',
'55534064877048198',
'212336130412243110',
'812944042149730764',
'3116285494907301262',
'11959798385860453492',
'45950804324621742364',
'176733862787006701400',
'680425371729975800390',
'2622127042276492108820',
'10113918591637898134020',
'39044429911904443959240',
'150853479205085351660700',
'583300119592996693088040',
'2257117854077248073253720',
'8740328711533173390046320',
'33868773757191046886429490',
'131327898242169365477991900',
'509552245179617138054608572',
'1978261657756160653623774456',
'7684785670514316385230816156',
'29869166945772625950142417512',
'116157871455782434250553845880',
'451959718027953471447609509424',
'1759414616608818870992479875972',
'6852456927844873497549658464312',
'26700952856774851904245220912664',
'104088460289122304033498318812080',
'405944995127576985730643443367112',
'1583850964596120042686772779038896',
'6182127958584855650487080847216336',
'24139737743045626825711458546273312',
'94295850558771979787935384946380125',
'368479169875816659479009042713546950',
'1440418573150919668872489894243865350',
'5632681584560312734993915705849145100',
'22033725021956517463358552614056949950',
'86218923998960285726185640663701108500',
'337485502510215975556783793455058624700',
'1321422108420282270489942177190229544600',
'5175569924646105559418940193995065716350',
'20276890389709399862928998568254641025700',
'79463489365077377841208237632349268884500',
'311496878311103321137536291518809134027240',
'1221395654430378811828760722007962130791020',
'4790408930363303911328386208394864461024520',
'18793142726809884575211361279087545193250040',
'73745243611532458459690151854647329239335600',
'289450081175264899454283846029490767264392230',
'1136359577947336271931632877004667456667613940',
'4462290049988320482463241297506133183499654740',
'17526585015616776834735140517915655636396234280',
'68854441132780194707888052034668647142985206100',
'270557451039395118028642463289168566420671280440',
'1063353702922273835973036658043476458723103404520',
'4180080073556524734514695828170907458428751314320',
'16435314834665426797069144960762886143367590394940',
'64633260585762914370496637486146181462681535261000',
'254224158304000796523953440778841647086547372026600',
'1000134600800354781929399250536541864362461089950800',
'3935312233584004685417853572763349509774031680023800',
'15487357822491889407128326963778343232013931127835600',
'60960876535340415751462563580829648891969728907438000',
'239993345518077005168915776623476723006280827488229600',
'944973797977428207852605870454939596837230758234904050',
'3721443204405954385563870541379246659709506697378694300',
'14657929356129575437016877846657032761712954950899755100',
'57743358069601357782187700608042856334020731624756611000',
'227508830794229349661819540395688853956041682601541047340',
'896519947090131496687170070074100632420837521538745909320',
'3533343320884635898708258511468514257188006702535057407320',
'13927547459020991989083038404429289207944958458536245702640',
'54906677482678910726192747555923159377475316999998660943100',
'216489185503133990863274261791925599831188392742851863147080',
'853702637172735926234421145556838686126761775155774328259240',
'3366939372774715522158184331074634818182181954352680060985040',
'13280705303722489004068393750349948449496384375502238018329880',
'52391773216519910749994580850004383791591241114366627044787600',
'206709359781542193322705891717290023323187260396682873976707440',
'815663960219058384462569194343901173113117297781505394610791520',
'3218959557293069695825496284821467129607123621602012360874730820',
'12704920022590345879098861442746675573493602966676969141151592440',
'50151000089172417943811295168736877263790538026356457136124707000',
'197987426438993719534698504405274280676181776208398535128701017200',
'781708976802233823680102715669100177152510806064194216284009188600',
'3086748267372923303762456877257472494397093952150920751480446539600',
'12190039767760866606383939871203238833805472726290924323643119385200',
'48145535217206784075634048230802707999063631776107012034556858076000',
'190174864107966797098754490511670696596301345515622697536499589400200',
'751269297881058917464501210451062751843240026086509499359064493663600',
'2968129521136642608343357241290264314659358135849980153205484311031600',
'11727731278637465915893265197293239487190634585553580117543620936271200',
'46343454246228695957965322150594252812285572152590760141906244022362000',
'183149331181095806425878953139148487114152581147038684080813476376374624',
'723875928001473901587997767169015449070222106438295751367024692344718752',
'2861304849265668492891140780463352404986232263244287143198790516197234752',
'11311095732253345760960290897769189975961199415637572612957718759342193629',
'44718285453094622775889522153971216184032648852520635911693306722980765510',
'176809220945312585436978572208778500912252165463043129681618151197016257478',
'699138751524213124094312216825551629561424593205010237977696200916445964684',
'2764775971936660990736598311991954171447451800401631395639071339987763587614',
'10934377152170553993439479038404269881062854488806451985760537780703486068308',
'43247909631719355347185999181748231619129200590055369794426007640095877732860',
'171069509209912116706646841207804116182333282333996796075729541331934805254424',
'676730852609799402854235298307342753721289013938899090358400685563095038432942',
'2677285562879644352897777603522480091364515660984549685943453807118230006063172',
'10592738531393375483204250518284595144094388049982348757428447671641692632684724',
'41913713613427025293254228669471419634905851996333034651695296542467129122133800',
'165858552441704085803306019163479760555270300042632151407422816318048496669015180',
'656376399024616169349253607753345435388942038466586811952779656067170646392272840',
'2597771382055171036438595264488592497806939617029730903644099765561619037129981240',
'10282088127575012633735978459444359117193900861809983856381541729425708916192792880',
'40699932171651091675204914735300588172225857577997852764843602678976764459929805150',
'161115593562260183597018076262500259385225118963936327496691227156776984827584194180',
'637841185472509493966277041641953081675754238090104091048544721209706145413312768740',
'2525330407789119221009341756704875466226455554887350891090156651320061065513932186440',
'9998943371381242321023474793439574481139884832189105555262377011307809353994353116580',
'39593131470570019928884900188787576804513637926117934749025519709205419589642069387800',
'156788800623457278918384204747598804145874006187427021606141058048453461574982594775688',
'620925183926009621146978506218967449531342090729015621989883130549504437230725772687824');
var     n:longint;
begin
        readln(n);
        while n<>-1 do
        begin
                writeln(a[n]);
                readln(n);
        end;
end.

Code mẫu của RR

//Written by Nguyen Thanh Trung
{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=101;
type
  big=array[0..MAXN] of longint;
var
  f1,f2:text;
  f:array[0..150] of big;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1); close(f2);
end;
operator + (a,b:big) c:big;
var
  i,nho:longint;
begin
  fillchar(c,sizeof(c),0); c[0]:=max(a[0],b[0]);
  nho:=0;
  for i:=1 to c[0] do
    begin
      c[i]:=a[i]+b[i]+nho;
      if c[i]<10 then nho:=0 else begin c[i]-=10; nho:=1; end;
    end;
  if nho>0 then
    begin
      inc(c[0]);
      c[c[0]]:=1;
    end;
end;
operator * (a,b:big) c:big;
var
  i,j,nho:longint;
begin
  fillchar(c,sizeof(c),0);
  c[0]:=a[0]+b[0]+1;
  for i:=1 to a[0] do
  for j:=1 to b[0] do
    c[i+j-1]+=a[i]*b[j];
  nho:=0;
  for i:=1 to c[0] do
    begin
      c[i]+=nho;
      if c[i]<10 then nho:=0
      else begin nho:=c[i] div 10; c[i]:=c[i] mod 10; end;
    end;
  if nho>0 then begin inc(c[0]); c[c[0]]:=nho; end;
  while (c[0]>0) and (c[c[0]]=0) do dec(c[0]);
end;
procedure init;
var
  i,j:longint;
begin
  f[0][0]:=1; f[0][1]:=1;
  for i:=1 to 150 do
    for j:=i-1 downto 0 do
      f[i]+=f[j]*f[i-j-1];
end;
procedure solve;
var
  n,i:longint;
begin
  read(f1,n);
  while n>=0 do
    begin
      for i:=f[n,0] downto 1 do
        write(f2,f[n,i]);
      writeln(f2);
      read(f1,n);
    end;
end;
begin
  init;
  openF;
  solve;
  closeF;
end.

Code mẫu của hieult

#include <cstdio>
#include <iostream>
//#include <conio.h>
#define base 1000000000

using namespace std;

struct solon
{
     int so;
     long long a[40];
};


solon tong (solon A,solon B)
{
      int du = 0;
      solon C;
      if(A.so<B.so)
      {
           C = A; 
           A = B;
           B = C;
      }
      for(int i = B.so+1;i<=A.so;i++) B.a[i] = 0;
      C.so = A.so;
      for(int i = 1;i<=A.so;i++)
      {
          C.a[i] = (A.a[i]+B.a[i]+du)%base;
          du = (A.a[i]+B.a[i]+du)/base;
      }
      if(du>0) {C.so++; C.a[C.so] = du;}
      return C;
}

solon tichnho(solon A,long long k,int chuso)
{
      solon C;
      long long du = 0;
      C.so = A.so+chuso;
      for(int i = 1;i<=chuso;i++)
           C.a[i] = 0;
      for(int i = chuso+1;i<=chuso+A.so;i++)
      {
           C.a[i] = (A.a[i-chuso]*k+du)%base;
           du = (A.a[i-chuso]*k+du)/base;
      }
      if(du>0) {C.so++; C.a[C.so] = du;}
      return C;
}

solon tich2(solon A){
      solon C;
      int du = 0;
      C.so = A.so;
      for(int i = 1;i<=A.so;i++){
            C.a[i] = (A.a[i]*2+du);
            if(C.a[i]>=base){
                   C.a[i]-=base;
                   du = 1;
            }
            else du = 0; 
      }
      if(du>0) {C.so++; C.a[C.so] = du;}
      return C; 
}

solon tich(solon A,solon B)
{
      solon C;
      C.so = 1; C.a[1] = 0;
      for(int i = 1;i<=B.so;i++)
      {
           C = tong(C,tichnho(A,B.a[i],i-1));
      }
      return C;
}

void print(solon A)
{
      printf("%lld",A.a[A.so]);
      for(int i = A.so-1;i>=1;i--)
          printf("%09lld",A.a[i]);
}

solon hieu(solon A,solon B){
      solon C; C.so = A.so;
      for(int i = B.so+1;i<=A.so;i++)
           B.a[i] = 0;
      int du = 0;
      for(int i = 1;i<=A.so;i++){
           C.a[i] = A.a[i]-B.a[i]-du;
           if(C.a[i]<0){
                C.a[i]+=base;
                du = 1;
           }
           else du = 0;  
      }
      while(C.a[C.so]==0) C.so--;
      if(C.so==0) C.so = 1; 
      return C;
}

solon F[151];
int n;

int main()
{
     F[0].so = 1; F[0].a[1] = 1;
     F[1].so = 1; F[1].a[1] = 1;
     for(int i = 2;i<=150;i++){
          F[i].so = 1; F[i].a[1] = 0;   
          for(int j = 0;j<i;j++){
               F[i] = tong(F[i],tich(F[j],F[i-j-1]));
          }
     }
     while(scanf("%d",&n)>0 && n>0){
          print(F[n]);
          printf("\n");
     }
}

Code mẫu của ll931110

Program MCIRGAME;
        Const
                maxn = 150;
                maxv = 10000000;
        Var
                F: array[0..maxn,1..150] of qword;
                k: array[1..100] of qword;
                n: integer;

Procedure optimize;
          Var
                i,j,s,p,q,tmp: integer;
          Begin
                Fillchar(F, sizeof(F), 0);
                F[0,1]:= 1;
                F[1,1]:= 1;

                For i:= 2 to maxn do
                    For j:= 0 to i - 1 do
                        Begin
                             Fillchar(k, sizeof(k), 0);
                             For p:= 1 to 50 do
                               For q:= 1 to 50 do
                                 Begin
                                        tmp:= p + q - 1;
                                        k[tmp]:= k[tmp] + F[j,p] * F[i - 1 - j,q];

                                        If k[tmp] > maxv then
                                          Begin
                                                k[tmp + 1]:= k[tmp + 1] + k[tmp] div maxv;
                                                k[tmp]:= k[tmp] mod maxv;
                                          End;
                                 End;

                             For s:= 1 to 100 do
                                Begin
                                   F[i,s]:= F[i,s] + k[s];
                                   If F[i,s] >= maxv then
                                      Begin
                                        F[i,s + 1]:= F[i,s + 1] + F[i,s] div maxv;
                                        F[i,s]:= F[i,s] mod maxv;
                                      End;
                                End;
                        End;
          End;

Procedure solve;
          Var
                   st: string;
                i,j,t: integer;
          Begin
                Repeat
                        Readln(n);
                        If n <> -1 then
                                Begin
                                        t:= 100;
                                        While F[n,t] = 0 do dec(t);

                                        Write(F[n,t]);
                                        For i:= t - 1 downto 1 do
                                          Begin
                                                str(F[n,i], st);
                                                For j:= 1 to 7 - length(st) do write(0);
                                                Write(st);
                                          End;
                                        Writeln;
                                End;
                Until n = -1;
          End;

Begin
        optimize;
        solve;
End.

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.