Hướng dẫn giải của Bee Walk
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.
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 dx:array[1..6] of longint=(-1,-1,0,0,1,1); dy:array[1..6] of longint=(0,1,-1,1,-1,0); var f:array[-14..14,-14..14,0..14] of longint; n,test,it:longint; procedure init; var i,x,y,j:longint; begin f[0,0,0]:=1; for i:=1 to 14 do for x:=-14 to 14 do for y:=-14 to 14 do if f[x,y,i-1]>0 then for j:=1 to 6 do inc(f[x+dx[j],y+dy[j],i],f[x,y,i-1]); end; begin init; read(test); for it:=1 to test do begin read(n); writeln(f[0,0,n]); end; end.
Code mẫu của happyboy99x
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using namespace std; #define max 100000000 int f[40][40][40]; int main() { int n,tc; int d[6][2] = {{0,-1},{0,1},{-1,1},{-1,0},{1,0},{1,-1}}; f[20][20][0]=1; scanf("%d",&tc); for(int i=0;i<tc;i++) { scanf("%d",&n); for(int k=1;k<=n;++k) for(int x=1;x<=38;x++) for(int y=1;y<=38;y++) { f[x][y][k] = 0; for(int l=0;l<=5;l++) f[x][y][k] += f[x+d[l][0]][y+d[l][1]][k-1]; } printf("%d\n",f[20][20][n]); } }
Code mẫu của ladpro98
program BEE; uses math; const fi = ''; fo = ''; maxn = 50; B = trunc(1e9); dx: array[1..6] of longint = (-1,-1,0,1,1,0); dy: array[1..6] of longint = (0,1,1,0,-1,-1); var F:array[-maxn..maxn,-maxn..maxn,0..maxn] of longint; chk:array[-maxn..maxn,-maxn..maxn,0..maxn] of boolean; inp,oup:text; n,i,res,t,tt: longint; function DP(i,j,step: longint): longint; var d,x,y:longint; begin if chk[i,j,step] then exit(F[i,j,step]); chk[i,j,step] := true; if step = 0 then exit(0); for d:=1 to 6 do begin x := i + dx[d]; y := j + dy[d]; F[i,j,step] := (F[i,j,step] + DP(x,y,step-1)); //mod B; end; exit(F[i,j,step]); end; begin assign(inp,fi);reset(inp);assign(oup,fo);rewrite(oup); readln(inp,t); for tt:=1 to t do begin readln(inp,n); chk[0,0,0] := true; F[0,0,0] := 1; for i:=1 to 6 do begin chk[dx[i],dy[i],1] := true; F[dx[i],dy[i],1] := 1; end; res := DP(0,0,n); writeln(oup,res); end; close(oup); end.
Code mẫu của RR
{$R+,Q+} {$Mode objFPC} uses math; const FINP=''; FOUT=''; MAXN=14; var d:array[0..MAXN,-MAXN..MAXN,-MAXN..MAXN] of longint; f1,f2:text; n,test:longint; procedure openF; begin assign(f1,FINP); reset(f1); assign(f2,FOUT); rewrite(f2); end; procedure closeF; begin close(f1); close(f2); end; procedure init; var i,l1,l2:longint; begin d[0,0,0]:=1; for i:=0 to 13 do for l1:=-i to i do for l2:=-i to i do if d[i,l1,l2]>0 then begin d[i+1,l1+1,l2]+=d[i,l1,l2]; d[i+1,l1-1,l2]+=d[i,l1,l2]; d[i+1,l1,l2+1]+=d[i,l1,l2]; d[i+1,l1,l2-1]+=d[i,l1,l2]; d[i+1,l1+1,l2+1]+=d[i,l1,l2]; d[i+1,l1-1,l2-1]+=d[i,l1,l2]; end; end; begin init; openF; read(f1,test); for test:=1 to test do begin read(f1,n); writeln(f2,d[n,0,0]); end; closeF; end.
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> bool test(int n,int m) { if(n>=2&&n<=30&&m>=1&&m<=15) return true; else return false; } main() { int f[32][16][15]; for(int i=2;i<=30;i++) for(int j=1;j<=15;j++) f[i][j][0]=0; f[16][8][0]=1; for(int k=1;k<=14;k++) { for(int i=2;i<=30;i++) for(int j=1;j<=15;j++) { if((i-j)%2==0) { f[i][j][k]=0; if(test(i+1,j+1)) f[i][j][k]+=f[i+1][j+1][k-1]; if(test(i+1,j-1)) f[i][j][k]+=f[i+1][j-1][k-1]; if(test(i-1,j+1)) f[i][j][k]+=f[i-1][j+1][k-1]; if(test(i-1,j-1)) f[i][j][k]+=f[i-1][j-1][k-1]; if(test(i+2,j)) f[i][j][k]+=f[i+2][j][k-1]; if(test(i-2,j+1)) f[i][j][k]+=f[i-2][j][k-1]; } } } int n,m; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&m); printf("%d\n",f[16][8][m]); } //for(int i=1;i<=14;i++) //printf(" %d",f[16][8][i]); //getch(); }
Code mẫu của ll931110
{$MODE DELPHI} program MBEEWALK; const dx: array[1..6] of integer = (-1,-1,0,0,1,1); dy: array[1..6] of integer = (0,1,-1,1,-1,0); maxn = 14; type rec = record x,y: integer; end; var f: array[-maxn..maxn,-maxn..maxn,0..maxn] of int64; q: array[1..40000] of rec; front,rear,back: integer; nTest,n,i: integer; procedure precalc; var i,j: integer; u,v: rec; begin fillchar(f, sizeof(f), 0); f[0,0,0] := 1; front := 1; rear := 1; back := 1; q[1].x := 0; q[1].y := 0; for i := 1 to maxn do begin back := rear; while front <= back do begin u := q[front]; inc(front); for j := 1 to 6 do begin v.x := u.x + dx[j]; v.y := u.y + dy[j]; if f[v.x,v.y,i] = 0 then begin inc(rear); q[rear] := v; end; f[v.x,v.y,i] := f[v.x,v.y,i] + f[u.x,u.y,i - 1]; end; end; end; end; begin precalc; readln(nTest); for i := 1 to nTest do begin readln(n); writeln(f[0,0,n]); end; end.
Code mẫu của khuc_tuan
// {$APPTYPE CONSOLE} {$mode delphi} var a : array[1..40,1..40,0..7] of integer; procedure go(i, j, s : integer); begin if s > 7 then exit; inc(a[i,j,s]); go(i,j-1,s+1); go(i,j+1,s+1); if i mod 2=0 then begin go(i+1,j,s+1); go(i+1,j-1,s+1); go(i-1,j,s+1); go(i-1,j-1,s+1); end else begin go(i+1,j+1,s+1); go(i+1,j,s+1); go(i-1,j+1,s+1); go(i-1,j,s+1); end; end; var k, res, st, i, j, x, y : integer; begin go(20,20,0); read(st); for k:=1 to st do begin read(x); y := x div 2; x := x - y; res := 0; for i:=1 to 40 do for j:=1 to 40 do res := res + a[i,j,x] * a[i,j,y]; writeln(res); end; end.
Bình luận