제출 #444921

#제출 시각아이디문제언어결과실행 시간메모리
444921aryan12Brunhilda’s Birthday (BOI13_brunhilda)C++17
100 / 100
337 ms81856 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
 
mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());
 
const int N = 1e7 + 1e5;
int dp[N];
 
void Solve() {
	for(int i = 0; i < N; i++) {
		dp[i] = 0;
	}
	int m, q;
	cin >> m >> q;
	int primes[m + 1];
	int lcm = 1;
	for(int i = 1; i <= m; i++) {
		cin >> primes[i];
		lcm *= primes[i];
		lcm = min(lcm, N + 10);
		for(int j = primes[i] - 1; j < N; j += primes[i]) {
			dp[j] = primes[i] - 1;
		}
	}
	for(int i = N - 2; i >= 0; i--) {
		dp[i] = max(dp[i], dp[i + 1] - 1);
	}
	for(int i = 1; i < N; i++) {
		if(i >= lcm) {
			dp[i] = -1;
			continue;
		}
		dp[i] = dp[i - dp[i]] + 1;
	}
	while(q--) {
		int num;
		cin >> num;
		if(dp[num] == -1) {
			cout << "oo\n";
		}
		else {
			cout << dp[num] << "\n";
		}
	}
}
 
int32_t main() {
	auto begin = std::chrono::high_resolution_clock::now();
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t = 1;
	//cin >> t;
	while(t--) {
		Solve();
	}
	auto end = std::chrono::high_resolution_clock::now();
    auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
    cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; 
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...