Editorial for Xây hàng rào


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

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 RR

var
  i,j,gh,n,cat,kq:longint;
  d:array[1..2500] of longint;
begin
  readln(n);
  kq:=0;
  gh:=n div 2+n mod 2;
  for i:=2 to 2500 do
    for j:=1 to i-1 do
      if (j<gh) and (i-j<gh) then inc(d[i]);
  for cat:=2 to n-2 do
    kq:=kq+d[cat]*d[n-cat];
  writeln(kq);
end.

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
main()
{
long n,f[2500][1300],KQ=0;
for(long i=2;i<=2498;i++)
  {
  if(i%2==0)
    f[i][(i+3)/2]=1;
  else f[i][(i+3)/2]=2;  
  for(long j=(i+5)/2;j<=i;j++)
     {
     f[i][j]=f[i][j-1]+2;
     //printf("%ld ",f[i][j]);
     }
  for(long j=i+1;j<=1300;j++)
    {
    f[i][j]=i-1;
    //printf("%ld ",f[i][j]);
    }
  printf("\n");      
  } 
scanf("%ld",&n);
for(long i=2;i<=n-2;i++)
  {
  KQ=KQ+f[i][(n+1)/2]*f[n-i][(n+1)/2];
  //printf("%ld",i);
  }
printf("%ld",KQ);
//getch();
}

Code mẫu của ll931110

Program QUAD;
        Const
                input  = '';
                output = '';
        Var
                n,p: integer;
                F: array[0..4,0..2500] of longint;

Procedure init;
          Var
                fi: text;
          Begin
                Assign(fi, input);
                        Reset(fi);
                        Readln(fi, n);
                Close(fi);

                p:= n div 2;
                If not odd(n) then dec(p);
          End;

Procedure solve;
          Var
                i,j,k,s: integer;
          Begin
                Fillchar(F, sizeof(F), 0);
                F[0,0]:= 1;

                For i:= 1 to 4 do
                        For j:= 1 to n do
                                Begin
                                        If p < j then s:= p else s:= j;
                                        For k:= 1 to s do F[i,j]:= F[i,j] + F[i - 1,j - k];
                                End;
          End;

Procedure printresult;
          Var
                fo: text;
          Begin
                Assign(fo, output);
                        Rewrite(fo);
                        Writeln(fo, F[4,n]);
                Close(fo);
          End;

Begin
        init;
        solve;
        printresult;
End.

Code mẫu của khuc_tuan

n = input()
maxlen = (n-1) / 2

F = [[0 for i in range(n+1)] for j in range(5)]
T = [[0 for i in range(n+1)] for j in range(5)]

for i in range(1,n+1):
    if i<=maxlen:
        F[1][i] = 1
    T[1][i] = F[1][i] + T[1][i-1]

for k in range(2,4+1):
    for i in range(1,n+1):
        x = max(1,i-maxlen)
        F[k][i] = T[k-1][i-1] - T[k-1][x-1]
        T[k][i] = T[k][i-1] + F[k][i]

print F[4][n]

Comments

Please read the guidelines before commenting.


There are no comments at the moment.