比赛是两三个月之前的了,由于北京时间是凌晨,也没有参加。于是就在codeforces上做了一下:http://codeforces.com/gym/100579
A. Homework
数论题目,预先计算出每个数有多少个质因子,然后每次查询来临时,线性扫描统计即可。
#include <bits/stdc++.h>
#define FOR(i, n) for (int i = 0; i < n; ++i)
using namespace std;
vector<bool> primes;
vector<short int> cnt;
void precompute() {
int cap = int(1e7) + 5;
primes.resize(cap); cnt.resize(cap);
fill(primes.begin(), primes.end(), true);
fill(cnt.begin(), cnt.end(), 0);
for (int i = 2; i < cap; ++i) {
if (!primes[i]) continue;
int cur = i;
while (cur < cap) {
++cnt[cur]; primes[cur] = false; cur += i;
}
}
return;
}
int main() {
int T;
cin >> T;
// clock_t start = clock();
precompute();
// cout << "total time: " << clock() - start << endl;
FOR(i, T) {
int a, b, k;
cin >> a >> b >> k;
int res = 0;
if (k < 9) for (int j = a; j <= b; ++j) res += (cnt[j] == k);
cout << "Case #" << i + 1 << ": " << res << endl;
}
return 0;
}
B. Autocomplete
明显的不能再明显的字典树了,每次来一个单词,就插入到trie树中,同时判断最小无歧义的前缀长度是多少。

本文分享了在CodeForces平台上解决四道算法题目的详细思路与代码实现,包括数论、字典树、动态规划及复杂图论问题。通过实战案例展示了如何高效地进行问题分析和算法设计。
最低0.47元/天 解锁文章
1475

被折叠的 条评论
为什么被折叠?



