srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

abc 019 C - 高橋くんと魔法の箱

問題

問題概要

省略

解法

2倍したものは同じものとしてみなせるため、まずすべての数字を2で割れるだけ割る。そのあと、数字の種類が答えとなる。

ミス

なし。

コード

#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
#define rep(i,n) for(int i=0;i<(n);i++)
const int INF = 1e9;

int main(void){
    int n; cin >> n;
    vector<ll> v(n);
    rep(i, n) cin >> v[i];

    set<int> s;
    rep(i, n){
        while(v[i] % 2 == 0){
            v[i] /= 2;
        }
        s.insert(v[i]);
    }

    printf("%d\n", s.size());
    return 0;
}