結果
| 問題 |
No.737 PopCount
|
| コンテスト | |
| ユーザー |
xuelei
|
| 提出日時 | 2018-09-28 23:17:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,070 bytes |
| コンパイル時間 | 1,623 ms |
| コンパイル使用メモリ | 161,164 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-12 07:20:47 |
| 合計ジャッジ時間 | 2,280 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 15 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const unsigned long long MOD=1e9+7;
int main(){
unsigned long long n,ans=0;
cin>>n;
for(int i=0;i<log2(n)+2;++i){
unsigned long long k=1;
for(int j=0;j<i;++j){k*=2;}
if(k>n)break;
unsigned long long m=k*2;
unsigned long long numblock=(3*k-1)*k/2;
unsigned long long last_num_b= ((n-k)/m) *m +k;
unsigned long long last_num_e= last_num_b+k-1;
unsigned long long blocks=(last_num_b-k)/m+1;
ans+=((numblock+numblock+(blocks-1)*m*k)%MOD)*(blocks%MOD)/2;
ans%=MOD;
if(last_num_e>n){
ans-=(n+1+last_num_e)*(last_num_e-n)/2;
ans%=MOD;
}
cout << "i=" << i << endl;
cout << "k=" << k << endl;
cout << "m=" << m << endl;
cout << "numblock=" << numblock << endl;
cout << "last block begins at: " << last_num_b << endl;
cout << "last block ends at: " << last_num_e << endl;
cout << "there are " << blocks << " blocks" << endl;
cout << "the ans is " << ans << endl << endl;
ans%=MOD;
}
cout << ans%MOD << endl;
return 0;
}
xuelei