熊猫(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 ...
随机推荐
- MySQL为何不建议使用null列
Preface Null is a special constraint of columns.The columns in table will be added null cons ...
- Web前端开发面试技巧
Web前端开发面试技巧 面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程.无论大公司还是小公司,之所以在如何招聘到真正有能力的,前端工程师方面会遇到同样的问题. 近 ...
- 图解HTTP总结(6)——HTTP首部
HTTP报文首部 HTTP 协议的请求和响应报文中必定包含 HTTP 首部. 首部内容为客户端和服务器分别处理请求和响应提供所需要的信息. 对于客户端用户来说, 这些信息中的大部分内容都无须亲自查看. ...
- POJ 1180 斜率优化DP(单调队列)
Batch Scheduling Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4347 Accepted: 1992 ...
- POJ:3684-Physics Experiment(弹性碰撞)
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3392 Accepted: 1177 Sp ...
- 使用.gitignore忽视项目中的文件/文件夹
在项目开发的过程中,我们经常需要IDE来提高编程效率.然而,不同的IDE会生成各种各样的临时文件.在项目生命周期中,我们往往不需要关注这类文件的变更记录,因而我们是不需要将它们加入到源代码管理器中. ...
- 通过aop添加日志管理
1.使用spring 的 aop 技术切到自定义注解上,所以先创建一个自定义注解类 import java.lang.annotation.*; @Target(ElementType.METHOD) ...
- 6 URL 实习文章链接跳转
需要解决的三个问题? . 1.不够多的URL (1)正则表达式 (2)\d 数字 /detail/123 /detail/(\d){3} #限定3个数字 /detail/(\d+) #限定多个数字 ( ...
- async/await 实现协程
2. 基本了解 在了解异步协程之前,我们首先得了解一些基础概念,如阻塞和非阻塞.同步和异步.多进程和协程. 2.1 阻塞 阻塞状态指程序未得到所需计算资源时被挂起的状态.程序在等待某个操作完成期间,自 ...
- Jsoncpp 编译
1. linux下编译jsoncpp 从(http://jsoncpp.sourceforge.net/)下载源码包“jsoncpp-src-0.5.0.tar.gz”,解压后在其解压后目录中运行 $ ...