結果

問題 No.376 立方体のN等分 (2)
ユーザー tails
提出日時 2015-05-06 00:32:28
言語 C++11
(gcc 4.8.5)
結果
WA   .
(最新)
AC  
(最初)
実行時間 -
コード長 863 Byte
コンパイル時間 1,160 ms
使用メモリ 1,600 KB
最終ジャッジ日時 2018-09-14 17:16:11

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
sample1.txt AC 6 ms
1,592 KB
sample2.txt AC 6 ms
1,592 KB
system_test1.txt WA -
system_test2.txt WA -
system_test3.txt WA -
t01.txt AC 6 ms
1,592 KB
t02.txt AC 7 ms
1,592 KB
t03.txt WA -
t04.txt WA -
t05.txt WA -
t06.txt WA -
t07.txt WA -
t08.txt WA -
t09.txt WA -
t10.txt WA -
t11.txt WA -
t12.txt WA -
t13.txt AC 6 ms
1,596 KB
t14.txt WA -
t15.txt AC 7 ms
1,596 KB
t16.txt WA -
t17.txt WA -
t18.txt AC 7 ms
1,596 KB
t19.txt WA -
t20.txt AC 332 ms
1,592 KB
t21.txt AC 7 ms
1,592 KB
t22.txt WA -
t23.txt WA -
t24.txt AC 6 ms
1,588 KB
t25.txt WA -
t26.txt AC 6 ms
1,596 KB
t27.txt AC 6 ms
1,596 KB
t28.txt AC 6 ms
1,592 KB
t29.txt AC 7 ms
1,596 KB
t30.txt AC 6 ms
1,596 KB
t31.txt WA -
t32.txt AC 6 ms
1,592 KB
t33.txt AC 6 ms
1,596 KB
t34.txt WA -
t35.txt WA -
テストケース一括ダウンロード

ソースコード

diff #
#include <bits/stdc++.h>
using namespace std;

typedef long long loong;

map<loong,int> e;
loong p[20];int pn;
loong ae[20];
loong n,m,a,t;

// 皆さんは自前のライブラリで素因数分解してください (^^)
void factor(loong n){
	char cmd[256];
	sprintf(cmd,"factor %lld",n);
	FILE* f=popen(cmd,"r");
	loong x;
	fscanf(f,"%lld:",&x);
	while(fscanf(f,"%lld",&x)==1){
		if(++e[x]==1){
			p[pn++]=x;
		}
	}
	fclose(f);
}

void find_b(loong b,int i){
	if(i==pn){
		loong c=m/b;
		if(t>a+b+c-3){
			t=a+b+c-3;
		}
	}else{
		for(int d=0;d<=e[p[i]]-ae[i]&&b*b<=m;++d,b*=p[i]){
			find_b(b,i+1);
		}
	}
}

void find_a(loong a,int i){
	if(i==pn){
		::a=a;
		m=n/a;
		find_b(1,0);
	}else{
		for(int d=0;d<=e[p[i]]&&a*a*a<=n;++d,a*=p[i]){
			find_a(a,i+1);
		}
	}
}

int main(){
	cin>>n;
	factor(n);
	t=n;
	find_a(1,0);
	cout<<t<<" "<<n-1<<endl;
	return 0;
}
0