码迷,mamicode.com
首页 > 其他好文 > 详细

hdoj 5317 RGCDQ

时间:2015-08-05 06:31:22      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317

 1     #include<stdio.h>
 2 
 3     const int MAXN = 1000010;
 4     int F[MAXN];
 5     bool flag[MAXN];
 6     int S[8][MAXN];
 7 
 8     void init(){
 9         //对数据进行初始化
10         for(int i = 2; i <= MAXN ; ++i)
11         if(!flag[i]){
12             F[i]++;
13             for(int j = i * 2; j <= MAXN; j += i ){
14                 flag[j] = true;
15                 F[j]++;
16             }
17         }
18         //进行筛选,素数F值为1,其余数看其质因数种类数
19         for(int i = 2; i <= MAXN ; ++i){
20             for(int j = 1; j <= 7; ++j){
21                 S[j][i] = S[j][i-1] + ( F[i] == j );
22             }
23         }
24         //由数据范围可知,F的值不超过7,通过动态规划计算每一个值在每一个位置对应的个数
25     }
26     int main()
27     {
28         int T;
29         int l, r;
30         int cnt[8];
31         init();
32         scanf("%d",&T);
33         while(T-->0){
34             int ans = 1;
35             scanf("%d%d",&l,&r);
36             for( int i = 1; i <= 7; ++i){
37                 cnt[i] = S[i][r] - S[i][l-1];
38 //                printf("%d %d ",i,cnt[i]);
39             }
40             //统计个数
41             if(cnt[2]+cnt[4]+cnt[6]>=2)
42                 ans = 2;
43             if(cnt[3]+cnt[6]>=2)
44                 ans = 3;
45             if(cnt[4]>=2)
46                 ans = 4;
47             if(cnt[5]>=2)
48                 ans = 5;
49             if(cnt[6]>=2)
50                 ans = 6;
51             if(cnt[7]>=2)
52                 ans = 7;
53             printf("%d\n",ans);
54         }
55 
56     }
57     ///总结:先分析数据范围,读清题目,简化过程
58     ///对于T较多的情况,可以先初始化

 

hdoj 5317 RGCDQ

标签:

原文地址:http://www.cnblogs.com/blueprintf/p/4703555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!