zoukankan      html  css  js  c++  java
  • hdu-4548-树状数组

    这题 我一开始 以为是 数位DP 真心被DP给吓到了 一看到给个区间 然后求符合某个特点的数 就TM想到了数位DP..

    然后 反正 我找不出状态 =-=

    因为 这题的数据范围不大的原因 我就可以用树状数组做 才100W啊

    一般其实用dp的话 可能都是要10^9吧

    这题 蛮好的 又要用掉这筛选素数的方法 叫什么名来着 我忘记了 也懒得去查了 .

     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 
     5 const int size = 1000010;
     6 int prime[size/10];
     7 bool vis[size];
     8 int tree[size];
     9 
    10 int lowBit( int x )
    11 {
    12     return x & (-x);
    13 }
    14 
    15 void update( int x , int var )
    16 {
    17     while( x<size )
    18     {
    19         tree[x] += var;
    20         x += lowBit(x);
    21     }
    22 }
    23 
    24 int getSum( int x )
    25 {
    26     int ans = 0;
    27     while( x )
    28     {
    29         ans += tree[x];
    30         x -= lowBit(x);
    31     }
    32     return ans;
    33 }
    34 
    35 bool solve( int x )
    36 {
    37     int sum = 0;
    38     while( x )
    39     {
    40         sum += x%10;
    41         x /= 10;
    42     }    
    43     if( vis[sum] )
    44         return true;
    45     return false;
    46 }
    47 
    48 void init( )
    49 {
    50     int cnt = 0;
    51     memset( vis , true , sizeof(vis) );
    52     memset( tree , 0 , sizeof(tree) );
    53     vis[1] = true;
    54     for( int i = 2 ; i<size ; ++i )
    55     {
    56         if( vis[i] )
    57         {
    58             prime[cnt++] = i;
    59             int j = i + i;
    60             while( j<size )
    61             {
    62                 vis[j] = false;
    63                 j += i;
    64             }            
    65         }
    66     }
    67     for( int i = 0 ; i<cnt ; ++i )
    68     {
    69         if( solve( prime[i] ) )
    70         {
    71             update( prime[i] , 1 );
    72         }
    73     }
    74 }
    75 
    76 int main()
    77 {
    78     cin.sync_with_stdio(false);
    79     int t , ans , L , R;
    80     init();
    81     cin >> t;
    82     for( int k = 1 ; k<=t ; ++k )
    83     {
    84         cin >> L >> R;
    85         ans = getSum(R) - getSum(L-1);
    86         cout << "Case #" << k << ": " << ans << endl;
    87     }
    88     return 0;
    89 }
    View Code

    today:

      贼烦咯.

      是不是追女孩子越用真心越得不到

      还是越不在乎才能得到

      我也是醉了

    just follow your heart
  • 相关阅读:
    【bzoj 1143】[CTSC2008]祭祀river
    【SRM-09 B】撕书II
    【刷题记录】BZOJ-USACO
    【noip 2014】提高组Day2T3.华容道
    【noip 2012】提高组Day2T3.疫情控制
    【noip 2012】提高组Day1T3.开车旅行
    点分治
    2—SAT问题
    生成树
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/radical/p/4041783.html
Copyright © 2011-2022 走看看