結果
問題 | No.262 面白くないビットすごろく |
ユーザー | hirokazu1020 |
提出日時 | 2015-08-01 02:37:28 |
言語 | C++11 (gcc 11.4.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,918 bytes |
コンパイル時間 | 627 ms |
コンパイル使用メモリ | 83,096 KB |
実行使用メモリ | 13,756 KB |
最終ジャッジ日時 | 2024-07-18 00:20:53 |
合計ジャッジ時間 | 4,331 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
13,756 KB |
testcase_01 | AC | 245 ms
6,940 KB |
testcase_02 | TLE | - |
testcase_03 | -- | - |
ソースコード
#include<sstream> #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<string> #include<vector> #include<set> #include<map> #include<queue> #include<numeric> #include<functional> #include<algorithm> #include<bitset> #include<fstream> using namespace std; #define INF (1<<29) #define rep(i,n) for(int i=0;i<(int)(n);i++) #define all(v) v.begin(),v.end() #define uniq(v) v.erase(unique(all(v)),v.end()) #define indexOf(v,x) (find(all(v),x)-v.begin()) #if defined(_MSC_VER)||defined(__SSE4_2__) #include<nmmintrin.h> #endif inline int popcount64(unsigned long long x){ #if defined(_MSC_VER) //Cf return __popcnt(x>>32)+__popcnt(x); #elif defined(__GNUC__) return __builtin_popcountll(x); #else x = (x>>1 & 0x5555555555555555ULL)+(x & 0x5555555555555555ULL); x = (x>>2 & 0x3333333333333333ULL)+(x & 0x3333333333333333ULL); x = (x>>4 & 0x0f0f0f0f0f0f0f0fULL)+(x & 0x0f0f0f0f0f0f0f0fULL); x = (x>>8 & 0x00ff00ff00ff00ffULL)+(x & 0x00ff00ff00ff00ffULL); x = (x>>16& 0x0000ffff0000ffffULL)+(x & 0x0000ffff0000ffffULL); return ((x>>32)+(x & 0xffffffff)); #endif } long long pos[48]={ 17783766827 , 36597922058 , 55728829658 , 75271835395 , 94749519875 , 114724570219 , 135675733668 , 154888300991 , 174703885783 , 194982811608 , 215555696869 , 236309167965 , 257608691826 , 278800736335 , 298028104037 , 318086072310 , 338747180679 , 359091718042 , 380081084166 , 401389964696 , 422407558678 , 443212979522 , 464479050991 , 486175479780 , 507764539058 , 530019313303 , 552431041517 , 571588514724 , 591580681943 , 612174376769 , 632548841747 , 653606242405 , 674792114825 , 695982932450 , 716630677540 , 737892684385 , 759673274442 , 781163722659 , 803366994623 , 826195995327 , 846368250656 , 867481363526 , 889237003125 , 910710669981 , 932654264548 , 955327488252 , 977123986647 , 999145398059 , }; long long num[]={ 1073741824 ,2147483648 ,3221225472 ,4294967296 ,5368709120 ,6442450944 ,7516192768 ,8589934592 ,9663676416 ,10737418240 ,11811160064 ,12884901888 ,13958643712 ,15032385536 ,16106127360 ,17179869184 ,18253611008 ,19327352832 ,20401094656 ,21474836480 ,22548578304 ,23622320128 ,24696061952 ,25769803776 ,26843545600 ,27917287424 ,28991029248 ,30064771072 ,31138512896 ,32212254720 ,33285996544 ,34359738368 ,35433480192 ,36507222016 ,37580963840 ,38654705664 ,39728447488 ,40802189312 ,41875931136 ,42949672960 ,44023414784 ,45097156608 ,46170898432 ,47244640256 ,48318382080 ,49392123904 ,50465865728 ,51539607552 }; int main(){ /*long long n,s=0,p=1,c=1; n=1000000000000; ofstream ofs("out.txt"); while(p<=n){ if((c&((1<<30)-1))==0)ofs<<p<<' '<<c<<endl; c++; p+=popcount64(p); }*/ long long n,c=-1,m=0; long long *p; cin>>n; p=upper_bound(pos,pos+48,n); if(p==pos){ m=1; c=1; }else { p--; m=*p; c=num[p-pos]; } while(m<n){ m+=popcount64(m); c++; } if(m==n)cout<<c<<endl; else cout<<-1<<endl; return 0; }