熊猫(i)
题目描述
熊猫喜欢吃数,熊猫对与每个数都有他独特的评价。具体来说,熊猫对数 xx 的评价是个四元组 (a, b, c, d)(a,b,c,d),计算方式如下:
首先将 xx 写成二进制形式(不含前导零),然后将这作为一个字符串,那么 a =a= 子串 “00”“00” 的数量,b =b= 子串 “01”“01” 的数量,c =c= 子串 “10”“10” 的数量,d =d= 子串 “11”“11” 的数量。
现在熊猫想吃掉区间 [A,B] 之间所有评价是 (a, b, c, d)(a,b,c,d) 的数,由于你被熊猫抓了起来,所以他要你回答他能吃到多少个数。如果你回答不出,他就只好吃你。
输入格式
第一行一个 0101 串为 AA 的二进制表示。
第一行一个 0101 串为 BB 的二进制表示。
第三行四个数 a, b, c, da,b,c,d。
输出格式
一个数表示答案,对 10000000071000000007 取模。
样例
样例输入 1
10
1001
0 0 1 1
样例输出 1
1
数据范围与提示
子任务一(13pts):B ≤ 2^{20}B≤220。
子任务二(15pts):B ≤ 2^{100}B≤2100。
子任务三(19pts):B ≤ 2^{1000}B≤21000。
子任务四(15pts):A = 1, B = 2^k − 1A=1,B=2k−1。
子任务五(38pts):无特殊限制。
对于所有的数据,1 ≤ A ≤ B ≤ 2^{100000}, a + b + c + d ≤ 10^51≤A≤B≤2100000,a+b+c+d≤105。
来源
solution
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100005
#define mod 1000000007
#define ll long long
using namespace std; int n,la,lb,a,b,c,d,n0,n1,s0,s1;
char A[maxn],B[maxn];
ll h[maxn],ny[maxn],ans;
ll work(ll a,int num){
ll ans=;
while(num){
if(num&)ans=ans*a;
a=a*a;a%=mod;ans%=mod;num>>=;
}
return ans;
}
void pre(){
n=; h[]=;for(int i=;i<=n;i++)h[i]=h[i-]*i%mod;
ny[n]=work(h[n],mod-);
for(int i=n-;i>=;i--){
ny[i]=ny[i+]*(i+)%mod;
}
}
void Pd(){
if(n>la){
A[]='';for(int i=;i<=n;i++)A[i]='';
}
if(n<la){puts("");exit();}
if(n>lb){puts("");exit();}
if(n<lb){
for(int i=;i<=n;i++)B[i]='';
}
}
ll C(int N,int M){
if(N<||M<||N<M)return ;
return h[N]*ny[M]%mod*ny[N-M]%mod;
}
void calc(int n0,int s0,int n1,int s1){
ll w0=C(s0-,n0-),w1=C(s1-,n1-);
if(s0==&&n0==)ans+=w1;
if(s1==&&n1==)ans+=w0;
ans=ans+w0*w1%mod;ans%=mod;
}
void solve(int i,int la,bool fa,bool fb,int n0,int s0,int n1,int s1){
if((n0==&&s0>)||(n1==&&s1>))return;
if(i==n+){
if(n0==&&la==&&!n1&&!s1&&!s0)ans++;
if(n1==&&la==&&!n0&&!s0&&!s1)ans++;
ans%=mod;
return;
}
if(!fa&&!fb){
calc(n0,s0,n1,s1);
if(la==)calc(n0-,s0,n1,s1);
if(la==)calc(n0,s0,n1-,s1);
return;
} if(s0<||n0<||s1<||n1<)return;
if(i==)solve(i+,,fa,fb,n0,s0,n1,s1-);
else { if(!fa||A[i]==''){
if(la==)solve(i+,,fa,fb&(B[i]==''),n0,s0-,n1-,s1);
else solve(i+,,fa,fb&(B[i]==''),n0,s0-,n1,s1);
}
if(!fb||B[i]==''){
if(la==)solve(i+,,fa&(A[i]==''),fb,n0-,s0,n1,s1-);
else solve(i+,,fa&(A[i]==''),fb,n0,s0,n1,s1-);
}
}
} int main()
{
pre();
scanf(" %s",A+);la=strlen(A+);
scanf(" %s",B+);lb=strlen(B+); scanf("%d%d%d%d",&a,&b,&c,&d);
n=a+b+c+d+;
Pd();ans=;
if(b==c){
n0=b;n1=n0+;
s0=a+n0,s1=d+n1;
solve(,,,,n0,s0,n1,s1);
printf("%lld\n",ans);
}
else if(b+==c){
n0=n1=c;
s0=a+n0,s1=d+n1;
solve(,,,,n0,s0,n1,s1);
printf("%lld\n",ans);
}
else puts("");
return ;
}
熊猫(i)的更多相关文章
- 聚光灯下的熊猫TV技术架构演进
2015年开始的百播大战,熊猫TV是其中比较特别的一员. 说熊猫TV是含着金钥匙出生的公子哥不为过.还未上线,就频频曝光,科技号,微博稿,站上风口浪尖.内测期间更是有不少淘宝店高价倒卖邀请码,光内测时 ...
- 爬取熊猫TV,javascript,selenium,模拟点击
from selenium import webdriver import csv def get_pages_numger(browser): res = browser.find_elements ...
- swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动
9.9 移除场景之外的平台 用为平台是源源不断的产生的,如果不注意销毁,平台就将越积越多,虽然在游戏场景中看不到.几十个还看不出问题,那几万个呢?几百万个呢? 所以我们来看看怎么移除平台,那什么样的平 ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚
之前我们学会了跑的动作,现在我们可以利用同样的方法来实现了跳和打滚的动画. …… class Panda : SKSpriteNode { …… //跳的纹理集合 let jumpAtlas = SK ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-3 显示一个动态的熊猫
一个静态的熊猫明显不能满足我们的欲望,接下来我们就让熊猫跑起来.序列帧动画的原理就是不停的切换不同的图片.当我们将一张一张的切换Panda类的跑动文理后,熊猫就跑起来了.那么首先我们需要一个数组常量来 ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-2 创建熊猫类
当我们创建好项目文件后我们就可以开始一步一步的按照我们之前列入的清单来编写我们的游戏.现在就让我们来创建一个熊猫这个类Panda.swift.我们将采取分解的方式,一步一步的完成Panda.swift ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-1
学习目标 一.进一步学习Swift的游戏制作 二.掌握SKNode,SKSpriteNode的运用 三.了解SpriteKit的物理系统 四.掌握动作(SKAction)的运用 在这一章,我们要通过制 ...
- Swift游戏实战-跑酷熊猫 14 熊猫打滚
这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...
- Swift游戏实战-跑酷熊猫 13 二段跳的实现
这节内容我们来实现熊猫的二段跳. 要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成j ...
- Swift游戏实战-跑酷熊猫 12 与平台的碰撞
这节主要实现熊猫和平台的碰撞,实现熊猫在平台上奔跑 要点 对平台进行物理属性设置 //设置物理体以及中心点 self.physicsBody = SKPhysicsBody(rectangleOfSi ...
随机推荐
- struts2入门第一天----------配置环境
放假之后有空就开始走上了三大框架的学习.第一个选择的框架是struts2.首先第一步当然是环境的配置.去apache官网把struts2下载下来.然后在自己的开发工具下创建一个web项目.在lib文件 ...
- php集成开发环境xampp的搭建
一:运维闲谈 作为一名linux运维工程师,在确保能够有熟练的服务器的搭建和维护优化技能的前提,还需对自身解决问题方法上做出一番功夫. 如何为自己的运维工作添砖加瓦,自动化运维便变得非常重要,一方面, ...
- POJ:3045-Cow Acrobats
Cow Acrobats Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6253 Accepted: 2345 Descript ...
- 存在チェックのみする場合はcount(*)でOK
SELECT SINGLE COUNT(*) FROM T001 WHERE BUKRS = P_BUKRS. IF SY-SUBRC <> 0. ENDIF.
- 笔记-Python-language reference-5.the import system
笔记-Python-language reference-5.the import system 前言 经常用到import,module,对其中的机制及原理有一定的了解,但没有将各种信息前后连通起来 ...
- kettle入门(三) 之kettle连接hadoop&hdfs图文详解(转)
1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情 ...
- android gradle.properties
gradle.properties 里面配置的东西,在gradle 文件里面可以直接引用. 例如: 在你工程根目录的gradle.properties 文件里面 可以这样配置: ## Project- ...
- java从数据库读取菜单,递归生成菜单树
首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; ...
- centos 服务器内存管理 服务于端口状态
du su /目录/ 查看改目录大小 ls -lht / 查看文件详情,显示文件大小(直观) df -h 查看系统内存占用情况 centos 版本 lsb_release -a cat /etc/i ...
- java线上编程网站
自带测试 http://codingbat.com/prob/p145416