結果
| 問題 |
No.381 名声値を稼ごう Extra
|
| コンテスト | |
| ユーザー |
IL_msta
|
| 提出日時 | 2017-01-09 02:14:14 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,680 bytes |
| コンパイル時間 | 708 ms |
| コンパイル使用メモリ | 69,644 KB |
| 実行使用メモリ | 12,264 KB |
| 最終ジャッジ日時 | 2024-12-17 23:56:31 |
| 合計ジャッジ時間 | 10,118 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 TLE * 1 |
ソースコード
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
/*
#include <sstream>
#include <algorithm>
#include <cmath>
*/
#include <string>
#include <vector>
/*
#include <queue>
#include <complex>
#include <set>
#include <map>
#include <stack>
#include <list>
#include <valarray>
#include<cassert>//assert();
*/
//#include <random>//xAOJ
/////////
#define REP(i, x, n) for(int i = x; i < n; i++)
#define rep(i,n) REP(i,0,n)
#define P(p) cout<<(p)<<endl;
#define PII pair<int,int>
/////////
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
/////////
using namespace::std;
/////////
/////////
ULL popcount(ULL N){
ULL ret = N;
ret = ((0xAAAAAAAAAAAAAAAA & ret)>> 1) + (0x5555555555555555 & ret);
ret = ((0xCCCCCCCCCCCCCCCC & ret)>> 2) + (0x3333333333333333 & ret);
ret = ((0xF0F0F0F0F0F0F0F0 & ret)>> 4) + (0x0F0F0F0F0F0F0F0F & ret);
ret = ((0xFF00FF00FF00FF00 & ret)>> 8) + (0x00FF00FF00FF00FF & ret);
ret = ((0xFFFF0000FFFF0000 & ret)>>16) + (0x0000FFFF0000FFFF & ret);
ret = ((0xFFFFFFFF00000000 & ret)>>32) + (0x00000000FFFFFFFF & ret);
return ret;
}
int to_num(vector<ULL>& ans, string str,const int keta){
int len = str.length();
ans.resize(len/keta + 1);
string temp;
ULL pow10 = 1;
int pos = 0;
ans[0] = 0;
for(int i= 0;i<len;++i){
if(i%keta == 0 && i != 0){
++pos;
ans[pos] = 0;
}
temp = str[i];
ans[pos] = ans[pos]*10 +stoi( temp );
}
return pos+1;
}
class vnum{
public:
vector<ULL> num;
int len;
int start;
int ketaMax;
ULL powMax;
ULL dimNum;
void set(string str){
ketaMax = 9;
powMax = 1;
start = 0;
len = to_num(num, str,ketaMax);
for(int i=0;i<ketaMax;++i){
powMax *= 10;
}
dimNum = (ULL)1<<31;//(ULL)1<<26;//67108864;/////
}
ULL div(){//
ULL ans;
ULL ama = 0;
//dimNum,powMax
int i= start;
ULL temp;
temp = (num[i] ) / dimNum;
ama = (num[i] ) % dimNum;
num[i] = temp;
++i;
for(; i < len;++i){//上の桁から
temp = (num[i] + ama*powMax) / dimNum;
ama = (num[i] + ama*powMax) % dimNum;
num[i-1] += temp / powMax;
num[i] = temp % powMax;
}
ans = popcount(ama);
////////
while( start < len && num[start] == 0 ){
++start;
}
return ans;
}
void view(){
for(int i=len-1;i>=0;--i){
cout << num[i];
}cout << endl;
}
};
void solve(){
string str;
cin >> str;
vnum Num;
Num.set(str);
ULL count = 0;
ULL test = 0;
while(Num.len != Num.start){
count += Num.div();
//Num.view();
}
cout << count%((ULL)1004535809) << endl;
}
int main(void){
std::cin.tie(0);
std::ios::sync_with_stdio(false);
std::cout << std::fixed;//
//cout << setprecision(16);//
solve();
return 0;
}
IL_msta