首页 > 代码库 > hdu-4548-树状数组
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 }
today:
贼烦咯.
是不是追女孩子越用真心越得不到
还是越不在乎才能得到
我也是醉了
hdu-4548-树状数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。