ABC019_C
2で割り切れたら割り続けて集合に入れる.
2で割り切るのは右ビットシフトと同義
a[i] /= 2; a[i] = a[i]>>1; a[i] =>>1;//これはダメ a[i]>>1;//これもダメ
解答
#include <bits/stdc++.h> using namespace std; #define ll long long int static const int MAX_N = 100000; set<int> S; int a[MAX_N]; int main(){ int n;cin>>n; for(int i=0;i<n;i++)cin>>a[i]; for(int i=0;i<n;i++){ while(a[i]>1 && !(a[i]%2)){//2で割り続ける a[i]=a[i]>>1; } S.insert(a[i]); } cout<<(int)S.size()<<endl; return 0; }