Editorial for Gấp tiền
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
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 t:array[1..3] of byte=(0,0,1); r:array[0..1] of char=('D','U'); var n:byte; m:longint; a:array[1..31] of qword; procedure init; var i:byte; begin a[1]:=2; for i:=2 to 31 do a[i]:=a[i-1]*2; end; function calc(n:byte;m:longint):byte; var kt:boolean; begin if m=a[n] div 2 then exit(0); if n=2 then exit(t[m]); kt:=(m>a[n] div 2); if kt then calc:=1-calc(n-1,a[n]-m) else calc:=calc(n-1,m); end; begin init; repeat readln(n,m); if n+m=0 then break; m:=a[n]-m; if n=2 then writeln(r[t[m]]) else writeln(r[calc(n,m)]); until false; 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(); it != _e; ++it) #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 bool Down( int f, int p ) { //True: pos is D, False otherwise int mid = 1 << (f-1); return p == mid ? 1 : p < mid ? !Down(f-1, mid-p) : Down(f-1,p-mid); } int main() { //freopen( "input.txt", "r", stdin ); //freopen( "output.txt", "w", stdout ); int f, p; for(;scanf("%d%d",&f,&p)==2&&(f||p);printf("%c\n", Down(f,p) ? 'D' : 'U')); return 0; }
Code mẫu của RR
var n,p:longint; function get(n,p:longint; rev:boolean):longint; var mid:longint; begin if not rev then begin if n=1 then exit(1); mid:=1 shl (n-1); if p=mid then exit(1); if p<mid then exit(get(n-1,p,not rev)); if p>mid then exit(get(n-1,p-mid,rev)); end else begin if n=1 then exit(0); mid:=1 shl (n-1); if p=mid then exit(0); if p>mid then exit(get(n-1,p-mid,not rev)); if p<mid then exit(get(n-1,p,rev)); end; end; begin read(n,p); while (n>0) or (p>0) do begin if get(n,p,false)=1 then writeln('D') else writeln('U'); read(n,p); end; end.
Code mẫu của ll931110
#include <algorithm> #include <bitset> #include <cmath> #include <cstring> #include <deque> #include <fstream> #include <iostream> #include <iterator> #include <map> #include <queue> #include <set> #include <sstream> #include <string> #include <vector> typedef long long ll; using namespace std; int calc(int k,int n) { if (k == 1) return 0; if (n % 4 == 1) return 1; if (n % 4 == 3) return 0; return calc(k - 1,n/2); }; int main() { // freopen("note.in","r",stdin); // freopen("note.ou","w",stdout); while (1) { int k,n; scanf("%d %d", &k, &n); if (!k && !n) break; if (calc(k,n)) printf("U\n"); else printf("D\n"); }; };
Code mẫu của khuc_tuan
#include <iostream> #include <sstream> #include <queue> #include <map> #include <set> #include <algorithm> #include <vector> #include <cmath> #include <cstdio> #include <cstring> #include <string> using namespace std; #define Rep(i,n) for(int i=0;i<(n);++i) #define For(i,a,b) for(int i=(a);i<=(b);++i) #define Ford(i,a,b) for(int i=(a);i>=(b);--i) #define Fit(i,v) for(__typeof(v.begin()) i=v.begin();i!=v.end();++i) #define Fill(a,b) memset((a), (b), sizeof(a)) #define pb push_back #define MP make_pair typedef long long LL; char find( int n, LL p) { if(n==1) return 'D'; if(p==(1LL<<(n-1))) return 'D'; else if(p<(1LL<<(n-1))) return 'U'+'D' - find(n-1,(1LL<<(n-1))-p); else return find(n-1, p-(1LL<<(n-1))); } int main() { int n; LL p; while( cin >> n >> p) { if(n==0 && p==0) break; cout << find( n, p) << endl; } return 0; }
Comments