Hướng dẫn giải của Gấp tiền


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

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;
}

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.