Editorial for VO 12 Bài 3 - Trò chơi với đồng xu


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.

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

#include <iostream>
using namespace std;

int main()
{
    int n,bit1=0;
    cin >> n;
    while (n) bit1+=n&1, n>>=1;
    cout << (1<<bit1) << endl;
}

Code mẫu của happyboy99x

#include<cstdio>

int partition(int n, int a[]) {
    int res = 0;
    for(; n != 0; n >>= 1)
        a[res++] = n & 1;
    return res;
}

int a[40], n;

int main() {
    scanf("%d", &n);
    int x = partition(n, a), res = 1;
    for(int i = 0; i < x; ++i) res *= a[i] + 1;
    printf("%d\n", res);
    return 0;
}

Code mẫu của RR

#include <sstream>
#include <iomanip>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <string>
#include <deque>
#include <complex>

#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; i++)
#define FORD(i,a,b) for(int i=(a),_b=(b); i>=_b; i--)
#define REP(i,a) for(int i=0,_a=(a); i<_a; i++)
#define FORN(i,a,b) for(int i=(a),_b=(b);i<_b;i++)
#define DOWN(i,a,b) for(int i=a,_b=(b);i>=_b;i--)
#define SET(a,v) memset(a,v,sizeof(a))
#define sqr(x) ((x)*(x))
#define ll long long
#define F first
#define S second
#define PB push_back
#define MP make_pair

#define DEBUG(x) cout << #x << " = "; cout << x << endl;
#define PR(a,n) cout << #a << " = "; FOR(_,1,n) cout << a[_] << ' '; cout << endl;
#define PR0(a,n) cout << #a << " = "; REP(_,n) cout << a[_] << ' '; cout << endl;
using namespace std;

//Buffer reading
int INP,AM,REACHEOF;
#define BUFSIZE (1<<12)
char BUF[BUFSIZE+1], *inp=BUF;
#define GETCHAR(INP) { \
    if(!*inp) { \
        if (REACHEOF) return 0;\
        memset(BUF,0,sizeof BUF);\
        int inpzzz = fread(BUF,1,BUFSIZE,stdin);\
        if (inpzzz != BUFSIZE) REACHEOF = true;\
        inp=BUF; \
    } \
    INP=*inp++; \
}
#define DIG(a) (((a)>='0')&&((a)<='9'))
#define GN(j) { \
    AM=0;\
    GETCHAR(INP); while(!DIG(INP) && INP!='-') GETCHAR(INP);\
    if (INP=='-') {AM=1;GETCHAR(INP);} \
    j=INP-'0'; GETCHAR(INP); \
    while(DIG(INP)){j=10*j+(INP-'0');GETCHAR(INP);} \
    if (AM) j=-j;\
}
//End of buffer reading

const long double PI = acos((long double) -1.0);

int main() {
    long long res = 1;
    int n; cin >> n;
    while (n) {
        if (n % 2 == 1) res = res * 2;
        n /= 2;
    }
    cout << res << endl;
    return 0;
}

Code mẫu của hieult

#include<cstdio>
#include<cmath>
#include<math.h>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
#define ep 0.00001
#define maxn 500000
#define oo 2000000001
#define modunlo 111539786
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
//#define g 9.81
double const PI=4*atan(1.0);

using namespace std;

typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;

int n;

int tinh(int x){
    int u = 1;
    while( u <= x) u *= 2; u/=2;
    if(u == x) return 2;
    if( x >= u + u/2) return 2 * tinh(x - u/2);
    else return tinh(x - u/2);
}

int main(){

   //freopen("input.in","r",stdin);
   // freopen("output.out","w",stdout);
    scanf("%d",&n);
    printf("%d",tinh(n));
}

Code mẫu của ll931110

var
  n,k,ret: longint;

begin
  read(n,k);
  ret := 1;
  while n > 0 do
    begin
      if n mod 2 = 1 then ret := ret shl 1;
      n := n div 2;
    end;
  writeln(ret);
end.

Comments

Please read the guidelines before commenting.


There are no comments at the moment.