Hướng dẫn giải của VM 08 Bài 11 - Quyết đấu


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

#include<iostream>
#define maxn 510

int n;

int g(int x)
{
    if (x>n) return x-n;
    return x<1?x+n:x;
}

int main()
{
    int i,j,l,k,x,re,a[maxn][maxn],f[maxn][maxn],r[maxn];
    scanf("%d",&n);
    for (i=1;i<=n;i++)
      for (j=1;j<=n;j++)
      {
         scanf("%d",&a[i][j]);
         f[i][j]=0;
      }
    for (i=1;i<=n;i++) f[i][g(i+1)]=1;
    for (l=3;l<=n+1;l++)
      for (i=1;i<=n;i++)
      {
          j=i+l-1;
          x=g(j);
          for (k=i+1;k<j;k++)
            if (f[i][g(k)]&f[g(k)][x]&(a[i][g(k)]|a[x][g(k)])) 
            {
              f[i][x]=1; break;
            }
      }
    re=0;
    for (i=1;i<=n;i++)
      if (f[i][i])
      {
         re++;
         r[re]=i;
      }
    printf("%d\n",re);
    for (i=1;i<=re;i++)
       printf("%d\n",r[i]);
    return 0;
}

Code mẫu của RR

{$R+,Q+}
program LSFIGHT;
const
  FINP='';
  FOUT='';
  MAXN=500;
var
  a,d:array[1..MAXN,1..MAXN] of byte;
  next:array[1..MAXN] of integer;
  n:longint;
procedure inp;
var
  f:text;
  i,j:integer;
begin
  assign(f,FINP); reset(f);
  readln(f,n);
  for i:=1 to n do
  for j:=1 to n do
    read(f,a[i,j]);
  close(f);
end;
procedure ans;
var
  f:text;
  count,i:integer;
begin
  assign(f,FOUT); rewrite(f);
  count:=0;
  for i:=1 to n do
    if d[i,i]=1 then inc(count);
  writeln(f,count);
  for i:=1 to n do
    if d[i,i]=1 then writeln(f,i);
  close(f);
end;
procedure solve;
var
  l,i,j,k:integer;
begin
  for i:=1 to n do next[i]:=i mod n+1;
  for i:=1 to n-1 do d[i,i+1]:=1;
  d[n,1]:=1;
  for l:=2 to n do
  for i:=1 to n do
    begin
      j:=(i+l) mod n; if j=0 then j:=n;
      k:=next[i];
      while k<>j do
        begin
          if (d[i,k]=1) and (d[k,j]=1) then
            if (a[i,k]=1) or (a[j,k]=1) then
              begin
                d[i,j]:=1;
                break;
              end;
          k:=next[k];
        end;
    end;
end;
begin
  inp;
  solve;
  ans;
end.

Code mẫu của hieult

#include <cstdio>
//#include <conio.h>

bool a[510][510],f[510][510],flag[510];
int n,so=0,A[510];

int main()
{
   // freopen("LSFIGHT.in","r",stdin);
    scanf("%d",&n);
    int hieu,i,j,t,k;
    for(i = 1;i<=n;i++)
        for(j = 1;j<=n;j++)
            scanf("%d",&a[i][j]);
    for(i = 1;i<=n-1;i++)
        f[i][i+1]=true; f[n][1] = true;
    for(hieu = 2;hieu<=n-1;hieu++)
    {
         for(i = 1;i<=n;i++)
         {
             j = (i+hieu-1)%n+1;
             if(j>i)
             {
                 f[i][j] = false;
                 for(k = i+1;k<j;k++)
                    if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
                    {
                        f[i][j] = true;
                        break;
                    }
             }
             else
             {
                 f[i][j] = false; 
                 for(k = i+1;k<=n;k++)
                    if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
                    {
                        f[i][j] = true;
                        break;
                    }
                 for(k = 1;k<j;k++)
                    if(f[i][k] && f[k][j] && (a[i][k]||a[j][k]))
                    {
                        f[i][j] = true;
                        break;
                    }
             }
         }
    }
    for(i = 1;i<=n;i++)
    {
        flag[i] = false;
        for(j = 1;j<=n ;j++)
        {
            if(j==i) continue;
            else
            {
                if(f[i][j]&&f[j][i] &&a[i][j])
                {
                     flag[i] = true;
                     break;
                }
            }
        }
        if(flag[i])
        {
            so++;
            A[so] = i;
        }
    }
    printf("%d\n",so);
    for(i = 1;i<=so;i++)
        printf("%d\n",A[i]);
   // getch();
}

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.