首页 > 代码库 > 国庆挖坑
国庆挖坑
10.1 2014鞍山
10.2 四汆省赛
10.3 ???
10.4 CCPC长春
HDU 5921 Binary Indexed Tree
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 typedef long long LL; 7 const LL mod = 1e9 + 7; 8 LL p[66], f[66][2][2], g[66][2][2]; 9 int nn[66];10 11 LL cal(int len)12 {13 memset(f, 0, sizeof(f));14 memset(g, 0, sizeof(g));15 f[0][1][1] = 1;16 for(int i = 0; i < len; i++)17 for(int p = 0; p <= 1; p++)18 for(int q = 0; q <= 1; q++)19 {20 if(!f[i][p][q]) continue;21 for(int nl = 0; nl <= 1; nl++)22 for(int nr = 0; nr <= 1; nr++)23 {24 if(p && nl > nr) continue;25 if(q && nr > nn[i+1]) continue;26 int np = p && nl == nr;27 int nq = q && nr == nn[i+1];28 f[i+1][np][nq] = (f[i+1][np][nq] + f[i][p][q]) % mod;29 if(!np) g[i+1][np][nq] = (g[i+1][np][nq] + g[i][p][q] + f[i][p][q] * (nl + nr)) % mod;30 }31 }32 return (g[len][0][0] + g[len][0][1]) % mod;33 }34 35 int main(void)36 {37 p[0] = 1LL;38 for(int i = 1; i < 66; i++) p[i] = p[i-1] * 2 % mod;39 int T;40 scanf("%d", &T);41 for(int kase = 1; kase <= T; kase++)42 {43 LL n;44 scanf("%lld", &n);45 int len = 0;46 while(n)47 {48 nn[++len] = n % 2;49 n /= 2;50 }51 reverse(nn + 1, nn + 1 + len);52 printf("Case #%d: %lld\n", kase, cal(len));53 }54 return 0;55 }
10.5 台湾
国庆挖坑
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。