Hướng dẫn giải của Majstor


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

var n,m:byte;cur,re:integer;a:array[0..50,1..50] of byte;r:array[0..2] of integer;
procedure rf;Var i,j:byte; c:char;begin readln(n);for i:=1 to n do begin read(c);case c of 'S':a[0,i]:=0;'R':a[0,i]:=1;'P':a[0,i]:=2;end end;readln;readln(m);for i:=1 to m do begin
for j:=1 to n do begin read(c);case c of 'S':a[i,j]:=0;'R':a[i,j]:=1;'P':a[i,j]:=2;end end;readln;end;end;
function max(a,b,c:integer):integer;begin if (a>b) and (a>c) then max:=a else begin if b>c then max:=b else max:=c;end;end;
procedure pr;var i,j:byte;begin cur:=0; re:=0;for j:=1 to n do begin fillchar(r,sizeof(r),0);for i:=1 to m do begin if a[0,j]=a[i,j] then cur:=cur+1 else begin if (a[0,j]+2) mod 3 = a[i,j] then cur:=cur+2;
end;
inc(r[a[i,j]]);
inc(r[(a[i,j]+1) mod 3],2);
end;
re:=re+max(r[0],r[1],r[2]);
end;
end;
procedure wf;
begin writeln(cur);write(re);end;
begin rf;pr;wf;end.

Code mẫu của ladpro98

uses    math;
const   q:array[1..3] of char=('P','R','S');
var     inp:text;
        r,n,i,j,k,t,res,rmax:longint;
        c:array[1..99,'A'..'Z'] of longint;
        win:array['A'..'Z'] of char;
        s,a:string;
begin
        assign(inp,'');reset(inp);
        readln(inp,r);
        readln(inp,s);
        readln(inp,n);
        win['S']:='P';
        win['R']:='S';
        win['P']:='R';
        for i:=1 to n do
        begin
                readln(inp,a);
                for j:=1 to r do inc(c[j,a[j]]);
        end;
        for j:=1 to r do
        begin
                inc(res,c[j,s[j]]+2*c[j,win[s[j]]]);
                t:=0;
                for k:=1 to 3 do t:=max(t,c[j,q[k]]+2*c[j,win[q[k]]]);
                inc(rmax,t);
        end;
        writeln(res);writeln(rmax);
end.

Code mẫu của RR

uses math;
const
FINP='';
FOUT='';
var
f1,f2:text;
round,n:longint;
s:string;
a:array[1..50] of string;
procedure openF;
begin
assign(f1,FINP); reset(f1);
assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
close(f1);close(f2);
end;
procedure inp;
var
i:longint;
begin
readln(f1,round);
readln(f1,s);
readln(f1,n);
for i:=1 to n do
  readln(f1,a[i]);
end;
function cal(c1,c2:char):longint;
begin
if c1=c2 then exit(1);
if c1='S' then if c2='P' then exit(2) else exit(0);
if c1='P' then if c2='R' then exit(2) else exit(0);
if c1='R' then if c2='S' then exit(2) else exit(0);
end;
procedure solve;
var
i,j,sum,x,y,z:longint;
begin
sum:=0;
for i:=1 to round do
for j:=1 to n do
sum+=cal(s[i],a[j,i]);
writeln(f2,sum);
sum:=0;
for i:=1 to round do
begin
x:=0; y:=0; z:=0;
for j:=1 to n do
begin
x+=cal('S',a[j,i]);
y+=cal('P',a[j,i]);
z+=cal('R',a[j,i]);
end;
sum+=max(max(x,y),z);
end;
writeln(f2,sum);
end;
begin
openF;
inp;
solve;
closeF;
end.

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
#include <string.h>
int Maxx(int a,int b,int c)
  {
  int T=a;
  if(b>T) T=b;
  if(c>T) T=c;
  return T;
  }  
main()
{
int N,c[4][52],T,KQ=0,max=0;
char a[52],b[52][52];
scanf("%d",&N);
  scanf("%s",a);
//for(int j=0;j<N;j++)   
//printf("%c",a[j]);  
scanf("%d",&T);
for(int i=1;i<=T;i++)
  scanf("%s",b[i]);
for(int i=1;i<=T;i++)
  for(int j=0;j<N;j++)        
      {   
      if((b[i][j]=='S'&&a[j]=='R')||(b[i][j]=='R'&&a[j]=='P')||(b[i][j]=='P'&&a[j]=='S'))
        KQ+=2;
      if(b[i][j]==a[j])
        KQ+=1;   
      }    
for(int i=1;i<=3;i++)
  for(int j=0;j<N;j++)
    c[i][j]=0;    
for(long i=0;i<N;i++)
  {
  for(int j=1;j<=T;j++)
    {
    if(b[j][i]=='S')
    c[1][i]++;
    else if(b[j][i]=='R')
    c[2][i]++;
    else if(b[j][i]=='P')
    c[3][i]++;
    }
  max+=Maxx(2*c[1][i]+c[2][i],2*c[2][i]+c[3][i],2*c[3][i]+c[1][i]);
  }
printf("%d\n%d\n",KQ,max);
//getch();
}

Code mẫu của ll931110

Var s,p,r: array[1..50] of byte;
      n,k: byte;
  q,i,j,m: integer;
      x,y: string;
Function calc(i: byte): byte;
         Begin
             If x[i] = y[i] then exit(1);
             If ((x[i] = 'S') and (y[i] = 'R')) or ((x[i] = 'R') and (y[i] = 'P')) or ((x[i] = 'P') and (y[i] = 'S')) then exit(0);
             calc:= 2;
         End;
Function max(d,e,f: byte): byte;
         Begin
             max:= d;
             If max < e then max:= e;
             If max < f then max:= f;
         End;
Begin
  q:= 0;
  Fillchar(s, sizeof(s), 0);
  Fillchar(p, sizeof(p), 0);
  Fillchar(r, sizeof(r), 0);
  Readln(k); Readln(x); Readln(n);
  For i:= 1 to n do
  Begin
    Readln(y);
    For j:= 1 to k do
     Begin
       q:= q + calc(j);
       If y[j] = 'S' then inc(s[j])
       else if y[j] = 'R' then inc(r[j])
       else inc(p[j]);
     End;
  End;
  m:= 0;
  For i:= 1 to k do
   m:= m + max(2 * p[i] + s[i],2 * s[i] + r[i],2 * r[i] + p[i]);
  Writeln(q); Writeln(m);
End.

Code mẫu của skyvn97

#include<stdio.h>
#define MAX   55
int m,n;
char a[MAX];
char e[MAX][MAX];
int max(int x,int y,int z) {
    int m=x;
    if (m<y) m=y;
    if (m<z) m=z;
    return (m);
}
int score(char x,char y) {
    if (x==y) return (1);
    if (x=='S') return (2*(y=='P'));
    if (x=='P') return (2*(y=='R'));
    if (x=='R') return (2*(y=='S'));
}
void init(void) {
    int i,j;
    int s=0;
    scanf("%d",&m);
    scanf("%s",a);
    scanf("%d",&n);
    for (i=1;i<=n;i=i+1) {
        scanf("%s",e[i]);
        for (j=1;j<=m;j=j+1)
            s=s+score(a[j-1],e[i][j-1]);
    }
    printf("%d\n",s);
}
void process(void) {
    int s,p,r,best,i,j; 
    best=0;
    for (i=1;i<=m;i=i+1) {
        s=0;
        r=0;
        p=0;
        for (j=1;j<=n;j=j+1) {
            if (e[j][i-1]=='S') s++;
            if (e[j][i-1]=='P') p++;
            if (e[j][i-1]=='R') r++;
        }           
        best+=max(s+2*p,p+2*r,r+2*s);
    }
    printf("%d",best);
}
int main(void) {
    init();
    process();
}

Code mẫu của khuc_tuan

#include <iostream>
#include <cstdio>
using namespace std;

#define R(i,n) for(i=0;i<n;++i)
#define M(a,b) ((a)==(b)?1:((a)==((b)+1)%3?2:0))
int r, n, i, j, f[99], sum, best, z, t;
char s[55],a[55][55];

int main() {
    f['S']=0;f['R']=1;f['P']=2;
    cin>>r;
    gets(s);gets(s);
    R(i,r)s[i]=f[s[i]];
    cin>>n;
    gets(a[0]);
    R(i,n){gets(a[i]);R(j,r)a[i][j]=f[a[i][j]];
        R(j,r)sum+=M(s[j],a[i][j]);
    }
    cout<<sum<<endl;
    sum=0;
    R(i,r){
        best=0;
        R(t,3){
            z=0;
            R(j,n)z+=M(t,a[j][i]);
            if(best<z)best=z;
        }
        sum+=best;
    }
    cout<<sum<<endl;
    return 0;
}

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.