Codeforces Round #520 (Div. 2) C. Banh-mi
C. Banh-mi
题目链接: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的更多相关文章
- Codeforces Round #520 (Div. 2)
Codeforces Round #520 (Div. 2) https://codeforces.com/contest/1062 A #include<bits/stdc++.h> u ...
- Codeforces Round #520 (Div. 2) E. Company(dfs序判断v是否在u的子树里+lca+线段树)
https://codeforces.com/contest/1062/problem/E 题意 给一颗树n,然后q个询问,询问编号l~r的点,假设可以删除一个点,使得他们的最近公共祖先深度最大.每次 ...
- Codeforces Round #520 (Div. 2) B. Math 唯一分解定理+贪心
题意:给出一个x 可以做两种操作 ①sqrt(x) 注意必须是完全平方数 ② x*=k (k为任意数) 问能达到的最小的x是多少 思路: 由题意以及 操作 应该联想到唯一分解定理 经过 ...
- 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 ...
- CF每日一练 Codeforces Round #520 (Div. 2)
比赛过程总结:过程中有事就玩手机了,后面打的状态不是很好,A题理解错题意,表明了内心不在状态,B题想法和思路都是完全正确的,但是并没有写出来,因为自己代码能力不强,思路不是特别清晰,把代码后面写乱了, ...
- Codeforces Round #520 (Div. 2) Solution
A. A Prank Solved. 题意: 给出一串数字,每个数字的范围是$[1, 1000]$,并且这个序列是递增的,求最多擦除掉多少个数字,使得别人一看就知道缺的数字是什么. 思路: 显然,如果 ...
- Codeforces Round #520 (Div. 2) D. Fun with Integers
D. Fun with Integers 题目链接:https://codeforc.es/contest/1062/problem/D 题意: 给定一个n,对于任意2<=|a|,|b|< ...
- 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 ...
- 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 ...
随机推荐
- ruby OpenURI模块使用
OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP(OpenURI支持重定向) 像打开普通文件那样打开ht ...
- WordPress4.9 最新版本网站安全漏洞详情与修复
wordpress 目前互联网的市场占有率较高,许多站长以及建站公司都在使用这套开源的博客建站系统来设计网站,wordpress的优化以及html静态化,深受google以及搜索引擎的喜欢,全世界大约 ...
- MySQL server has gone away报错原因分析及解决办法
原因1. MySQL 服务宕了 判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长 $ mysql -uroot -p -e "show global status l ...
- 通过数据库恢复SharePoint网站
SharePoint网站一般包含很多个数据库,最主要的有3个,分别是SharePoint_Admin_Content(管理中心数据库),SharePoint_Config(配置数据库)和 ...
- leetcode笔记--3 Niim game
question: You are playing the following Nim Game with your friend: There is a heap of stones on the ...
- Daily Scrum02 12.02
今天是黑色星期一,虽然大家最近被各种大作业压得身心疲惫,但是团队的凝聚力战胜了一切不快. 看看同志们今天的战绩,是不是又有一种充实感油然而生呢??? By Ryan Mao who? Today? T ...
- tomcat中配置JNDI方法
1.项目中spring的数据源配置: <bean id="dataSource" class="org.springframework.jndi.JndiObjec ...
- Python时间获取及转换知识汇总
时间处理是我们日常开发中最最常见的需求,例如:获取当前datetime.获取当天date.获取明天/前N天.获取当天开始和结束时间(00:00:00 23:59:59).获取两个datetime的时间 ...
- 一个简单的NetCore项目:2 - 登录
1-UI,登陆界面布局 PS:使用的是metronic 框架,没有用过的可以自行百度. 1.1 metronic 放在wwwroot文件夹下面 1.2 metronic 中的 open sans 使 ...
- Hadoop执行bin/stop-all.sh时no namenode to stop异常
1 先关闭hadoop所有服务 命令: bin/stop-all.sh 2 格式化namenode 命令: bin/hadoop namenode -format 3 重新启动所有服务 命令: bin ...