熊猫(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 ...
随机推荐
- Open closed principle
#include <iostream> using namespace std; class Book { public: string getContents() { return &q ...
- vim 个性化设置和操作
一.vim 设置 1. 设置行号显示 1) 临时显示 命令行模式 :set nu 2) 永久显示 # vim ~/.vimrc 插入一行代码: set number 若没有该文件,在用户主目录 (/h ...
- 基于mybatis设计简单OA系统问题3
1. 问题:使用mybatis更新数据失败 描述:java.lang.NullPointerException 提交表单 com.duma.entity.User.updateUser - ==&g ...
- 用python画小猪佩奇(非原创)
略作改动: # coding:utf-8 import turtle as t t.screensize(400, 300, "blue") t.pensize(4) # 设置画笔 ...
- Choosing Capital for Treeland CodeForces - 219D (树形DP)
传送门 The country Treeland consists of n cities, some pairs of them are connected with unidirectional ...
- Snowflake Snow Snowflakes【Poj3349】
Description You may have heard that no two snowflakes are alike. Your task is to write a program to ...
- [WC2002][洛谷P1578]奶牛浴场
洛谷题解里那个人可真是话多呢. 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每 ...
- iOS 中 AFNetworking HTTPS 的使用
由于我们公司由HTTP转HTTPS,出现了一系列问题特此记录下. 一.HTTPS 二.App Transport Security 三.iOS 中用HTTPS 注意的问题 四.使用 AFNetwork ...
- 转载: keepalived工作原理和配置说明
转自:http://outofmemory.cn/wiki/keepalived-configuration keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件, ...
- 《Cracking the Coding Interview》——第5章:位操作——题目5
2014-03-19 06:22 题目:将整数A变成整数B,每次只能变一个二进制位,要变多少次呢. 解法:异或,然后求‘1’的个数. 代码: // 5.5 Determine the number o ...