C - And and Pair

题意:

问有多少组(i,j)满足要求。
要求为:
0<=j<=i<=n
i&n=i
i&j=0
答案mod 1e9+7

题解:

这个和我的思路时一样的,且讲的更清楚
i&n=i说明n为0的地方,i必须为0;n为1的地方,i随意(两种选择)
i&j=0说明i为1的地方,j必须为0;i为0的地方,j随意(两种选择)
j还要<=i
所以我的思路:
对于一组S:101010
我们从前往后开始扫,第一位为1时,我们可以认为i在这一位是1,对于j的取值,因为j在i为0的地方随便取,后面5位中,最少有3个0,最多有5个0(因为1的位置i是随便取得,i可以选1)
那么对于i为10x0x0(x表示这位有两种情况),我们可以确定j的情况,j为0x?x?x,(x表示有两种选择,?表示要根据i的情况定)
这个情况的答案就是:
0的个数为3个:C20 *23
0的个数为4个:C21 *24
0的个数为5个:C22 *25
求和:
sum=C20 *23+C21 *24+C22 *25
我们把23提出来:
sum=23 (C20 *20+C21 *21+C22 *22)=23 (2+1)2
(用的二项式定理,比赛时没想到:)
(x+1)n= (Cn0 *x0+Cn1 *x1+…+Cnn *xn)
现在将结论推广:
设k为后面0的数量
t为后面1的数量
答案就是sum=2k 3t
遍历字符串,不断更新k和t,然后取和

代码:

#include <bits/stdc++.h>
#define ll long long
#define maxn 100001
using namespace std;
const ll mod = 1000000007;ll pow_2[maxn+10],pow_3[maxn+10];ll power(ll a,ll b){ll res = 1;while(b){if(b&1) res = res*a%mod;a = a*a%mod;b>>=1;}return res;
}void init(){for(int i=0;i<=maxn;i++){pow_2[i] = power(2,i);pow_3[i] = power(3,i);}
}int main(){init();int t;string s;  cin>>t;while(t--){ll num0=0,num1=0,sum=0;cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='0') num0++;//0的数量 else num1++;//1的数量 }for(int i=0;i<s.size();i++){if(s[i]=='0'){num0--;//除了最高位0的数量 continue;}else{num1--;//除了最高位1的数量 sum = (sum + pow_2[num0] * pow_3[num1] % mod) % mod;}}cout<<(sum+1) % mod<<endl;}return 0;
}

C - And and Pair相关推荐

  1. C++:vector容器中使用pair该如何访问成员

    (显然,vector 的索引从 0 开始,这和普通数组一样.通过使用索引,总是可以访问到 vector 容器中现有的元素.) 如果是简单的访问vector里边的成员的话,是这样的: #include ...

  2. HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化

    题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...

  3. C++中标准模板库std::pair的实现

    以下用C++实现了标准模板库中的std::pair实现,参考了 cplusplus 和 vs2013中的utility文件. 关于std::pair的介绍和用法可以参考: https://blog.c ...

  4. C++_volatile限定修饰符 Pair类型

    Volatile限定修饰符 =========================================================== 当一个对象的值可能会在编译器的控制或检测之外被改变时 ...

  5. 推荐 | Pair,医学图像标注神器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在AI新基建时代,智能化医疗成为一种潮流趋势,其中医学影像标注为智 ...

  6. PPF(Point Pair Features)原理及实战技巧

    简介 基于Point Pair Features(PPF)的6D姿态估计方法PPF,Drost et al., 2010(https://ieeexplore.ieee.org/document/5 ...

  7. 6D位姿估计Point Pair Feature (PPF)算法详解

    作者丨丁洪凯@知乎 来源丨https://zhuanlan.zhihu.com/p/94952276 编辑丨3D视觉工坊 一.论文解读 论文: Drost et al. Model Globally, ...

  8. R语言配对图可视化:配对图(pair plot)可视化(根据分类变量的值为散点图上的数据点添加颜色和形状、Add color and shape by variables)

    R语言配对图可视化:配对图(pair plot)可视化(根据分类变量的值为散点图上的数据点添加颜色和形状.Add color and shape by variables) 目录

  9. Unshielded Twisted Pair - CAT5, 5e 6

    为什么80%的码农都做不了架构师?>>>    Network Cabling This section talks about the cabling used in today' ...

  10. C++ pair的使用

    定义: pair定义在头文件utility中,它可以保存两个数据成员,这两个数据成员类型可以不相同. 初始化 默认构造:std::pair<std::string, double> pro ...

最新文章

  1. 袋鼠过河(动态规划)
  2. 用apktool批量反编译apk文件
  3. python自学路线-自学python编程的方法路线
  4. C语言实现Hanoi算法塔的功能(附完整源码)
  5. 如何在线创建索引或者重构索引
  6. CMS之promotion failedconcurrent mode failure
  7. java 枚举类型知识点记录
  8. 混合选择集的坐标提起lisp_晓东CAD家园-论坛-A/VLISP-[LISP程序]:请教如何对选择集进行排序-我有(setq ss(ssget _w p0 p1 (list (0 . CIRC...
  9. JS函数创建的几种方式
  10. android上传到svn服务器端,上传Android项目到SVN
  11. linaro软件源更新问题
  12. 使用Ubuntu搭建Web服务器
  13. 国际短信平台的收费标准是什么?
  14. 数据是信息的载体,能够被计算机识别、存储和加工处理,数据包括文字、表格、图像等
  15. ps,ai,cdr平面设计教程,全套!基础到精通,小编亲看教程,推荐!
  16. 上海市社保和医保以及公积金转出到异地(注意事项)
  17. 关于泰泽-泰泽官网介绍
  18. anaconda图形界面打开方式
  19. r语言中怎样查看函数源代码
  20. k8s(五):核心技术-Service

热门文章

  1. 硬货 | 一片小小的薄膜,却可以粘住全世界!
  2. linux ntfs 速度慢,将U盘磁盘格式改成NTFS解决u盘复制速度慢问题
  3. dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)
  4. chrome 插件 页面请求转发_巧用Chrome插件二三事
  5. 世道变了,面试初级Java开发会问到Arrays!!!你不会还不知道吧!
  6. php大数组查找算法,PHP简单的数组查找算法分享
  7. python中可以表示任意大的整数_Python无法表示99999999999999999999这样大的整数。
  8. 地线与接地螺丝_电气接地规范与接地的各项参数
  9. 怎样用python批量处理文件夹_python批量处理文件或文件夹
  10. leetcode96. 不同的二叉搜索树