Submission #1607263
Source Code Expand
#pragma region include #include <iostream> #include <iomanip> #include <stdio.h> #include <sstream> #include <algorithm> #include <iterator> #include <cmath> #include <complex> #include <string> #include <cstring> #include <vector> #include <tuple> #include <bitset> #include <queue> #include <complex> #include <set> #include <map> #include <stack> #include <list> #include <fstream> #include <random> //#include <time.h> #include <ctime> #pragma endregion //#include ///////// #define REP(i, x, n) for(int i = x; i < n; ++i) #define rep(i,n) REP(i,0,n) #define ALL(X) X.begin(), X.end() ///////// #pragma region typedef typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef std::pair<LL,LL> PLL;// typedef std::pair<int,int> PII;// #pragma endregion //typedef ////定数 const int INF = (int)1e9; const LL MOD = (LL)1e9+7; const LL LINF = (LL)1e18+20; const LD PI = acos(-1.0); const double EPS = 1e-9; ///////// using namespace::std; LL ansMount = 1;//約数の数 LL ansNumber = 1;//数 LL N; vector<LL> prime; vector<LL> val; void cal(LL num){//約数の数を数える int size = val.size(); LL ans = 1; for(int i=0;i<size;++i){ ans *= (val[i]+1); } if( ansMount < ans ){ ansMount = ans; ansNumber = num; }else if( ansMount == ans ){ if( num < ansNumber ){ ansNumber = num; } } } void dfs(int v,LL num){ LL temp = num; int Lim; if( v == 0 ){ Lim = INF; }else{ Lim = val[v-1]; } while( (val[v]+1) <= Lim && temp * prime[v] <= N ){ val[v]++; temp *= prime[v]; } cal( temp ); while( val[v] ){ dfs(v+1,temp); val[v]--; temp /= prime[v]; } } void solve(){ const int N_MAX = 100; vector<bool> num(N_MAX,true); num[0] = false; num[1] = false; int cnt = 0; LL ans = 1; for(int i=2;i<N_MAX;++i){ if( num[i] ){ prime.push_back( i ); ans *= LL(i); if( ans >= 100000000000000000ll ){ break; } for(int j=i+i;j<N_MAX;j+=i){ num[j] = false; } } } /* int size = prime.size(); cout << "[" << size << "]" << endl; for(int i=0;i<size;++i){ cout << prime[i] << " "; } */ val.resize(prime.size(),0); int Q; cin >> Q; while(Q--){ cin >> N; ansMount = 1; ansNumber = 1; dfs(0,1); cout << ansMount << " " << ansNumber << "\n"; } cout << flush; } #pragma region main signed main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;//小数を10進数表示 cout << setprecision(16);//小数点以下の桁数を指定//coutとcerrで別 solve(); } #pragma endregion //main()
Submission Info
Submission Time | |
---|---|
Task | D - 2016 |
User | akarin55 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2685 Byte |
Status | AC |
Exec Time | 619 ms |
Memory | 256 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | Subtask3 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 8 / 8 | 34 / 34 | 58 / 58 | ||||||||
Status |
|
|
|
|
Set Name | Test Cases |
---|---|
Sample | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt |
Subtask1 | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt |
Subtask2 | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt |
Subtask3 | sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt, sub3_1.txt, sub3_2.txt, sub3_3.txt, sub3_4.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_1.txt | AC | 1 ms | 256 KB |
sample_2.txt | AC | 1 ms | 256 KB |
sample_3.txt | AC | 1 ms | 256 KB |
sample_4.txt | AC | 1 ms | 256 KB |
sub1_1.txt | AC | 1 ms | 256 KB |
sub1_2.txt | AC | 1 ms | 256 KB |
sub1_3.txt | AC | 1 ms | 256 KB |
sub1_4.txt | AC | 1 ms | 256 KB |
sub2_1.txt | AC | 4 ms | 256 KB |
sub2_2.txt | AC | 4 ms | 256 KB |
sub2_3.txt | AC | 4 ms | 256 KB |
sub2_4.txt | AC | 4 ms | 256 KB |
sub3_1.txt | AC | 40 ms | 256 KB |
sub3_2.txt | AC | 40 ms | 256 KB |
sub3_3.txt | AC | 612 ms | 256 KB |
sub3_4.txt | AC | 619 ms | 256 KB |