C. Banh-mi

time limit per test:1 second
memory limit per test:256 megabytes

题目链接:https://codeforc.es/contest/1062/problem/C

Description:

JATC loves Banh-mi (a Vietnamese food). His affection for Banh-mi is so much that he always has it for breakfast. This morning, as usual, he buys a Banh-mi and decides to enjoy it in a special way.

First, he splits the Banh-mi into nn parts, places them on a row and numbers them from 11 through nn . For each part ii , he defines the deliciousness of the part as xi∈{0,1}xi∈{0,1} . JATC's going to eat those parts one by one. At each step, he chooses arbitrary remaining part and eats it. Suppose that part is the ii -th part then his enjoyment of the Banh-mi will increase by xixi and the deliciousness of all the remaining parts will also increase by xixi . The initial enjoyment of JATC is equal to 00 .

For example, suppose the deliciousness of 33 parts are [0,1][0,1] . If JATC eats the second part then his enjoyment will become 11 and the deliciousness of remaining parts will become [1,_,1][1,_,1] . Next, if he eats the first part then his enjoyment will become 22 and the remaining parts will become [_,_,2][_,_,2] . After eating the last part, JATC's enjoyment will become 44 .

However, JATC doesn't want to eat all the parts but to save some for later. He gives you qq queries, each of them consisting of two integers lili and riri . For each query, you have to let him know what is the maximum enjoyment he can get if he eats all the parts with indices in the range [li,ri][li,ri] in some order.

All the queries are independent of each other. Since the answer to the query could be very large, print it modulo 109.

Input:

The first line contains two integers nn and qq (1≤n,q≤100000).

The second line contains a string of nn characters, each character is either '0' or '1'. The ii-th character defines the deliciousness of the ii-th part.

Each of the following qq lines contains two integers lili and riri (1≤li≤ri≤n) — the segment of the corresponding query.

Output:

Print q lines, where ii-th of them contains a single integer — the answer to the ii-th query modulo 109+7.

Sample Input:

4 2
1011
1 4
3 4

Sample Output:

14
3

题意:

给出一个01串,每次可以选一个出来,然后其它的都会加上选出来的这个数。问怎么选可以让选出来的和最大。

题解:

首先肯定会选大的,然后会选小的。但是询问次数那么多,如果每次都通过模拟操作来实现,肯定会超时。

我们考虑每一个数给最终答案的贡献,比如有k个1,总长度为n。

选出第一个1,然后对答案的直接贡献是1,但是后面所有的都会加1,第二个1选出来的时候对答案的贡献会加1,然后这个1又会加到后面的数上,选后面的一个1时,对答案的贡献就是2了,然后以此类推...

最后会发现第一个1对最终答案的贡献就是2^(n-1),然后1的总贡献就时(2^(n-1)+2^(n-2)+...+2^(n-k)),最后再推下就可以得出最终答案了。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define MOD 1000000007
using namespace std; const int N = 1e5+;
int n,q;
char s[N];
int len[N]; long long quick_pow(long long a,int b){
long long ans=;
while(b){
if(b&) ans=(ans*a)%MOD;
a=(a*a)%MOD;
b>>=;
}
return ans ;
} int main(){
scanf("%d%d",&n,&q);
scanf("%s",s+);
for(int i=;i<=n;i++) if(s[i]=='') len[i]=len[i-]+;else len[i]=len[i-];
for(int i=,l,r;i<=q;i++){
scanf("%d%d",&l,&r);
int len1 = len[r]-len[l-],k=r-l+;
long long ans;
ans=((quick_pow(,len1)-)%MOD*quick_pow(,k-len1)%MOD)%MOD;
printf("%lld\n",ans);
}
return ;
}

Codeforces Round #520 (Div. 2) C. Banh-mi的更多相关文章

  1. Codeforces Round #520 (Div. 2)

    Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...

  2. Codeforces Round #520 (Div. 2) E. Company(dfs序判断v是否在u的子树里+lca+线段树)

    https://codeforces.com/contest/1062/problem/E 题意 给一颗树n,然后q个询问,询问编号l~r的点,假设可以删除一个点,使得他们的最近公共祖先深度最大.每次 ...

  3. Codeforces Round #520 (Div. 2) B. Math 唯一分解定理+贪心

    题意:给出一个x 可以做两种操作  ①sqrt(x)  注意必须是完全平方数  ② x*=k  (k为任意数)  问能达到的最小的x是多少 思路: 由题意以及 操作  应该联想到唯一分解定理   经过 ...

  4. Codeforces Round #520 (Div. 2)B(贪心,数学)

    #include<bits/stdc++.h>using namespace std;int mi[100007];int main(){ int cnt=0; int flag=0; i ...

  5. CF每日一练 Codeforces Round #520 (Div. 2)

    比赛过程总结:过程中有事就玩手机了,后面打的状态不是很好,A题理解错题意,表明了内心不在状态,B题想法和思路都是完全正确的,但是并没有写出来,因为自己代码能力不强,思路不是特别清晰,把代码后面写乱了, ...

  6. Codeforces Round #520 (Div. 2) Solution

    A. A Prank Solved. 题意: 给出一串数字,每个数字的范围是$[1, 1000]$,并且这个序列是递增的,求最多擦除掉多少个数字,使得别人一看就知道缺的数字是什么. 思路: 显然,如果 ...

  7. Codeforces Round #520 (Div. 2) D. Fun with Integers

    D. Fun with Integers 题目链接:https://codeforc.es/contest/1062/problem/D 题意: 给定一个n,对于任意2<=|a|,|b|< ...

  8. Codeforces Round #520 (Div. 2) B. Math

    B. Math time limit per test:1 second memory limit per test:256 megabytes Description: JATC's math te ...

  9. Codeforces Round #520 (Div. 2) A. A Prank

    A. A Prank time limit per test   1 second memory limit per test    256 megabytes 题目链接:https://codefo ...

随机推荐

  1. windows和Ubuntu下安装mongodb

    windows 下载 mongodb官网下载压缩版安装包:下载地址:https://www.mongodb.com/download-center/community 注意选择版本(目前windows ...

  2. python语法图

  3. 【APUE】Chapter15 Interprocess Communication

    15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, messa ...

  4. mybatis <collection>标签 类型为string时无法获取重复数据错误

    1.场景: fyq_share_house 表 和 fyq_sh_tag 表 两张表是一对多的关系, 一个楼盘对应多个标签,在实体类ShareHouse中使用 /** * 楼盘标签 */ privat ...

  5. 常用模块(xml)

    XML(可扩展性标记语言)是一种非常常用的文件类型,主要用于存储和传输数据.在编程中,对XML的操作也非常常见. 本文根据python库文档中的xml.etree.ElementTree类来进行介绍X ...

  6. 使用vue和web3创建你的第一个以太坊APP

    欢迎回到这个很牛的教程系列的第2部分,在教程中我们亲手构建我们的第一个分布式应用程序. 在第二部分中,我们将介绍VueJS和Vuex的核心概念,并引入web3js以与metamask进行交互. 如果你 ...

  7. node gyp的问题

    解决 binding.gyp not found (xxx/xxx/xxx) while trying to load binding.gyp 问题 在使用ccap图形验证码模块时遇到这个问题 Err ...

  8. [翻译] ASP.NET Core 简介

    ASP.NET Core 简介 原文地址:Introduction to ASP.NET Core         译文地址:asp.net core 简介           翻译:ganqiyin ...

  9. STL 六大部件

    stl具有上面6大部件 容器是存储数据的,原理主要是模板,容器只是负责存储数据,并不关心内存的存储情况,所以出现了分配器,分配器主要是负责为容器分配内存的,对于数据的操作被封装为一个个函数,也就是算法 ...

  10. Spring Data学习(一):初识

    目录 前言 添加Spring Data 配置pom.xml 配置数据库相关信息(application.properties) 配置数据库信息 配置自动根据实体类在数据库创建表 创建User.java ...