QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#136665#235. Maximum MultipleTeam_name#100 ✓1421ms125896kbC++201012b2023-08-09 09:51:382023-08-09 09:51:42

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-08-09 09:51:42]
  • 评测
  • 测评结果:100
  • 用时:1421ms
  • 内存:125896kb
  • [2023-08-09 09:51:38]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
using LL = long long;

const int N = 1e6+5;
constexpr LL INF = 0x3f3f3f3f3f3f3f3f;

vector<int> f[N];

void sieve(int n)
{
	for(int i = 1; i <= n; i++) {
		for(int j = i; j <= n; j += i) 
			f[j].push_back(i);
		sort(f[i].begin(), f[i].end());
	}
}

LL g[N];

LL solve(int n)
{
	if(g[n] != INF) return g[n];
	const vector<int> &factors = f[n]; 
	LL ans = -1;
	for(int i = 0; i < (int)factors.size(); i++) {
		for(int j = i; j < (int)factors.size(); j++) {
			LL k = n-factors[i]-factors[j];
			if(k < factors[j]) break;
			if(n%k == 0) ans = max(ans, (LL)factors[i]*(LL)factors[j]*k);
		}	
	}
	return g[n] = ans;
}

int main()
{
	// freopen("1.in", "r", stdin);
	clock_t st_time = clock();

	memset(g, 0x3f, sizeof g);
	sieve(1e6);
	int T; scanf("%d", &T);
	while(T--) {
		int n; scanf("%d", &n);
		printf("%lld\n", solve(n));
	}

	cerr << "time : " << (clock()-st_time)/CLOCKS_PER_SEC << "s" << endl;
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1421ms
memory: 125896kb

input:

1000000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
...

output:

-1
-1
1
2
-1
8
-1
16
27
-1
-1
64
-1
-1
125
128
-1
216
-1
250
343
-1
-1
512
-1
-1
729
686
-1
1000
-1
1024
1331
-1
-1
1728
-1
-1
2197
2000
-1
2744
-1
2662
3375
-1
-1
4096
-1
-1
4913
4394
-1
5832
-1
5488
6859
-1
-1
8000
-1
-1
9261
8192
-1
10648
-1
9826
12167
-1
-1
13824
-1
-1
15625
13718
-1
17576
-1
16...

result:

ok 1000000 lines