Hướng dẫn giải của Coins Game
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 fi=''; fo=''; maxn=1000000; var n,x,y,max,i:longint; p:array[0..maxn+10] of boolean; a:array[1..200] of longint; procedure rf; begin assign(input,fi); reset(input); readln(x,y,n); max:=0; for i:=1 to n do begin read(a[i]); if a[i]>max then max:=a[i]; end; close(input); end; procedure pr; begin p[0]:=true; p[x]:=false; p[y]:=false; for i:=1 to x-1 do p[i]:=not p[i-1]; for i:=x+1 to y-1 do p[i]:=not (p[i-1] or p[i-x]); for i:=y+1 to max do p[i]:=not (p[i-1] or p[i-x] or p[i-y]); end; procedure wf; begin assign(output,fo); rewrite(output); for i:=1 to n do if p[a[i]] then write('B') else write('A'); close(output); end; begin rf; pr; wf; end.
Code mẫu của happyboy99x
#include <algorithm> #include <bitset> #include <cctype> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <utility> #include <vector> using namespace std; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vii> vvii; typedef vector<int> vi; typedef vector<vi> vvi; #define sz(a) int((a).size()) #define fi first #define se second #define pb push_back #define mp make_pair #define all(c) (c).begin(), (c).end() #define tr(c,i) for(typeof((c).begin()) i = (c).begin(), _e = (c).end(); i != _e; ++i) #define present(c,x) ((c).find(x) != (c).end()) #define cpresent(c,x) (find(all(c),x) != (c).end()) #define rep(i,n) for(int i = 0, _n = (n); i < _n; ++i) #define repd(i,n) for(int i = (n)-1; i >= 0; --i ) #define fo(i,a,b) for(int i = (a), _b = (b); i <= _b; ++i) #define fod(i,a,b) for(int i = (a), _b = (b); i >= _b; --i) #define INF 1000000000 #define N 1000000 int k, l, m, n; bool f[N+1]; int main() { #ifndef ONLINE_JUDGE freopen( "input.txt", "r", stdin ); //freopen( "output.txt", "w", stdout ); #endif scanf("%d%d%d",&k,&l,&m); f[0] = 0; #define F(i) (i >= 0 ? f[i] : 1) fo(i,1,N) { f[i] = !F(i-1) || !F(i-k) || !F(i-l); /*f[i] = (F(i-2) && F(i-k-1) && F(i-l-1)) || (F(i-k-1) && F(i-k-k) && F(i-k-l)) || (F(i-l-1) && F(i-l-k) && F(i-l-l));*/ } while(m--) { scanf("%d",&n); putchar( f[n] ? 'A' : 'B' ); } putchar(10); return 0; }
Code mẫu của ladpro98
program MCOINS; uses math; const maxn=1000006; fi=''; var f:array[-1..maxn] of boolean; inp:text; k,l,m,lim,n,i,j:longint; begin assign(inp,fi);reset(inp); readln(inp,k,l,m); lim:=0; f[0]:=true; for j:=1 to m do begin read(inp,n); if n>lim then begin for i:=lim+1 to n do if f[i-1] or f[max(i-k,-1)] or f[max(i-l,-1)] then f[i]:=false else f[i]:=true; lim:=n; end; if f[n] then write('B') else write('A'); end; end.
Code mẫu của RR
{$R+,Q+} uses math; const FINP=''; FOUT=''; MAXN=1000001; var f1,f2:text; f:array[0..MAXN] of longint; m,k,l:longint; procedure openF; begin assign(f1,FINP); reset(f1); assign(f2,FOUT); rewrite(f2); end; procedure closeF; begin close(f1); close(f2); end; procedure inp; begin read(f1,k,l,m); end; procedure solve; var i:longint; begin f[0]:=0; for i:=1 to MAXN do begin if f[i-1]=0 then begin f[i]:=1; continue; end; if (i>=k) and (f[i-k]=0) then begin f[i]:=1; continue; end; if (i>=l) and (f[i-l]=0) then begin f[i]:=1; continue; end; end; end; procedure ans; var i,u:longint; begin for i:=1 to m do begin read(f1,u); if f[u]=1 then write(f2,'A') else write(f2,'B') end; writeln; end; begin openF; inp; solve; ans; closeF; end.
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> main() { char f[1000001]; long a,b,T,n; scanf("%ld %ld %ld",&a,&b,&T); f[1]='A';f[a]='A';f[b]='A'; for(long i=2;i<a;i++) { if(i%2==0) f[i]='B'; else f[i]='A'; } for(long i=a+1;i<b;i++) { if(f[i-1]=='A'&&f[i-a]=='A') f[i]='B'; else f[i]='A'; } for(long i=b+1;i<=1000000;i++) { if(f[i-1]=='A'&&f[i-a]=='A'&&f[i-b]=='A') f[i]='B'; else f[i]='A'; } for(long i=1;i<=T;i++) { scanf("%ld",&n); printf("%c",f[n]); } //getch(); }
Code mẫu của ll931110
Program MCOINS; Const input = ''; output = ''; Var F: array[-10..1000000] of boolean; n: array[1..50] of longint; k,l,m: longint; Procedure init; Var fi: text; i: longint; Begin Assign(fi, input); Reset(fi); Readln(fi, k, l, m); For i:= 1 to m do read(fi, n[i]); Close(fi); End; Procedure optimize; Var i: longint; Begin For i:= -10 to -1 do F[i]:= true; F[0]:= false; For i:= 1 to 1000000 do F[i]:= not F[i - 1] or not F[i - k] or not F[i - l]; End; Procedure solve; Var fo: text; i: longint; Begin Assign(fo, output); Rewrite(fo); For i:= 1 to m do if F[n[i]] then write(fo, 'A') else write(fo, 'B'); Close(fo); End; Begin init; optimize; solve; End.
Code mẫu của khuc_tuan
// {$APPTYPE CONSOLE} {$mode delphi} var f : array[1..3] of integer; g : array[0..1000000] of boolean; ok : boolean; n, i, j : integer; begin f[1] := 1; read( f[2], f[3], n); g[0] := true; for i:=1 to 1000000 do begin ok := false; for j:=1 to 3 do if (i >= f[j]) and (g[i-f[j]]) then ok := true; g[i] := not ok; end; for i:=1 to n do begin read(j); if g[j] then write('B') else write('A'); end; end.
Bình luận