Homework
求一个区间[A,B]中素因数个数为K的数有多少个。做法是dp。对每个数i,找到它的某一个素因数d,i的结果就由i/d推得。找的方法是修改筛法。
#include <iostream>
#include <stdio.h>
#include <string>
#include <map>
#include <vector>
#include <stack>
#include <queue>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=1e7;
int divisor[maxn+10];
int dp[maxn+10];
int main(){
for(int i=2;i*i<=maxn;i++){
if(divisor[i])continue;
for(int j=2*i;j<=maxn;j+=i){
divisor[j]=i;
}
}
for(int i=2;i<=maxn;i++){
if(divisor[i]){
int j=i/divisor[i];
dp[i]=dp[j];
if(j%divisor[i]){
dp[i]++;
}
}else{
dp[i]=1;
}
}
int t;
cin>>t

这篇博客分享了作者在Facebook Hacker Cup 2015第一轮比赛中的解题经验,包括"Homework"中的素因数计数问题,使用动态规划和修改筛法;"Autocomplete"的单词自动补全模拟,利用字典树实现;以及"Winning at Sports"和"Corporate Gifting"两道涉及树型DP和四色定理的题目。尽管"Corporate Gifting"题目下载延迟导致未展示完整解法,但整体展现了比赛中的DP应用策略。
最低0.47元/天 解锁文章
1112

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



