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
AC × 4
AC × 8
AC × 12
AC × 16
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