Hướng dẫn giải của Cuộc đấu cân não
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
var x,y,t:longint; function win(x,y:longint):boolean; begin if x=y then exit(false); if y-x>x then exit(true); win:=not win(y-x,x); end; begin repeat read(x,y); if x+y=0 then break; if x>y then begin t:=x; x:=y; y:=t; end; if win(x,y) then writeln('T') else writeln('S'); until false; end.
Code mẫu của ladpro98
#include <iostream> using namespace std; bool canWin(int x, int y) { if (x > y) swap(x, y); if (x == y || y == 1) return 0; if (x <= y - x) return 1; return !canWin(x, y - x); } int main() { ios :: sync_with_stdio(0); cin.tie(0); int x, y; while (cin >> x >> y) { if (x == 0) break; if (x > y) swap(x, y); cout << (canWin(x, y) ? 'T' : 'S') << '\n'; } return 0; }
Code mẫu của RR
#include <iostream> #include <algorithm> #define FOR(i,a,b) for(long i=a; i<=b; i++) using namespace std; long x,y; inline int get(long x,long y) { if (x>y) return get(y,x); if (x==y) return 0; if (y>= ((long long)x<<1) ) return 1; return 1-get(y%x,x); } int main() { scanf("%ld %ld",&x,&y); while (x || y) { if (get(x,y)) printf("T\n"); else printf("S\n"); scanf("%ld %ld",&x,&y); } return 0; }
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> int main() { //freopen("NCOB.in","r",stdin); long long a,b; while(scanf("%lld %lld",&a,&b)>0 && a>0 && b>0) { int k = 0; long long r; while(true) { if(a==b) { k++; break; } if(a<b) { r = a; a = b; b = r; } if(a>2*b) break; else { a = a-b; k++; } } if(k%2==0) printf("T\n"); else printf("S\n"); } //getch(); }
Code mẫu của ll931110
#include <cmath> #include <iostream> using namespace std; int main() { double gold = (sqrt(5.0) + 1.0)/2.0; while (1) { int x,y; scanf("%d %d", &x, &y); if (!x && !y) break; if (x > y) swap(x,y); if (y >= gold * x) printf("T\n"); else printf("S\n"); }; };
Bình luận