結果

問題 No.262 面白くないビットすごろく
コンテスト
ユーザー hirokazu1020
提出日時 2015-08-01 02:37:28
言語 C++11
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=gnu++11 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 2,918 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 540 ms
コンパイル使用メモリ 102,244 KB
実行使用メモリ 108,516 KB
最終ジャッジ日時 2026-04-01 15:36:50
合計ジャッジ時間 4,108 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 2 TLE * 1 -- * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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