题目链接:传送门

题目:

C. Banh-mi
time limit per test
second
memory limit per test
megabytes
input
standard input
output
standard output 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 n
parts, places them on a row and numbers them from through n. For each part i, he defines the deliciousness of the part as xi∈{,}. 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 i-th part then his enjoyment of the Banh-mi will increase by xi and the deliciousness of all the remaining parts will also increase by xi. The initial enjoyment of JATC is equal to 0 . For example, suppose the deliciousness of
parts are [,,]. If JATC eats the second part then his enjoyment will become and the deliciousness of remaining parts will become [,_,]. Next, if he eats the first part then his enjoyment will become and the remaining parts will become [_,_,]. After eating the last part, JATC's enjoyment will become 4 . However, JATC doesn't want to eat all the parts but to save some for later. He gives you q
queries, each of them consisting of two integers li and ri. 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] in some order. All the queries are independent of each other. Since the answer to the query could be very large, print it modulo + .
Input The first line contains two integers n
and q (≤n,q≤ ). The second line contains a string of n
characters, each character is either '' or ''. The i-th character defines the deliciousness of the i -th part. Each of the following q
lines contains two integers li and ri (≤li≤ri≤n ) — the segment of the corresponding query.
Output Print q
lines, where i-th of them contains a single integer — the answer to the i-th query modulo + .
Examples
Input
Copy Output
Copy Input
Copy Output
Copy Note In the first example: For query : One of the best ways for JATC to eats those parts is in this order: , , ,
.
For query
: Both , and , ordering give the same answer. In the second example, any order of eating parts leads to the same answer.

题目大意:

  给出一个长度为n的二进制串,q次询问。

  每次询问l到r区间内吃Banh-mi得到的美味值的最大值。

  吃掉一个位置,会得到这个位置的美味值(初始值为0、1),其他位置的美味值也会加上这个位置的美味值。

思路:

  一个位置被吃掉后的贡献是和剩下的位置的数量正相关的,所以要贪心地吃美味值大的位置。

  然后举两个栗子模拟一下发现一只吃1的话,得到的美味值是1、2、4、8、16。。。

  然后开始吃0的话就是31、62、124、31*8、31*16。。。

  意会一下,答案大概就是(2cnt1-1)*2cnt0

  预处理前缀和就可以O(1)求出cnt1和cnt0了,然后快速幂跑一跑,时间复杂度为O(nlogn)。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int MAX_N = 1e5 + ;
const int MOD = 1e9 + ; string a;
ll sum[MAX_N]; ll fpow(ll a, ll p)
{
ll ans = ;
for (; p; p >>= ) {
if (p&)
ans = (ans*a)%MOD;
a = (a*a)%MOD;
}
return ans%MOD;;
} int main()
{
ios::sync_with_stdio(false);cin.tie();
int N, Q;
cin >> N >> Q;
cin >> a;
sum[] = ;
for (int i = ; i <= N; i++) {
sum[i] = sum[i-];
if (a[i-] == '')
sum[i]++;
}
while (Q--) {
ll l, r;
cin >> l >> r;
ll len = r-l+;
ll cnt1 = sum[r] - sum[l-];
ll cnt0 = len - cnt1;
ll ans = fpow(, cnt1) - ;
if (ans < )
ans += MOD;
ans = (ans * fpow(, cnt0)) % MOD;
cout << ans << endl;
}
return ;
}

Codeforces1062C. Banh-mi(贪心+快速幂)的更多相关文章

  1. Codeforces Round #209 (Div. 2)A贪心 B思路 C思路+快速幂

    A. Table time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  2. 小总结:快速幂+贪心————Bit Mask____UVA 10718 多多去理解去温习哦!

    传送门:https://vjudge.net/problem/UVA-10718 Preview: bitstream:a flow of data in binary form. in bit-wi ...

  3. 贪心,打表(或者快速幂), UVA - 11636

    题目链接: https://cn.vjudge.net/problem/34398/origin 题目比较简单,就是水题,基础贪心,大于所需的即可: AC代码: 打表: #include <cm ...

  4. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  5. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  6. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  7. codevs3500 快速幂入门题解

    codevs3500 快速幂入门题解 //我也是抄的题解 题目描述 Description 输入3个数a,b,c,求a^b mod c=? 输入描述 Input Description 三个数a,b, ...

  8. UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)

    题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m ...

  9. HDU 2817 A sequence of numbers 整数快速幂

    A sequence of numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

随机推荐

  1. 剑指offer(5)用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...

  2. [LspTrace]ReadAccConfig returns false! QT

    当qt运行出现以下信息时 [LspTrace]ReadAccConfig returns false! [LspTrace]FindMatchingProvider: inInfo is one of ...

  3. WinForm动态查询

    WinForm 动态查询 1. 使用场景 在对数据进行筛选, 包含多个筛选字段时适用. 2. 接口设计 /// <summary> /// 定义可作为追加到 WHERE 子句的控件接口 / ...

  4. struts2学习笔记(一)

    配置文件web.xml和struts.xml web.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  5. url接收传参

    下面是接收传参的代码: 方法一: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + ...

  6. spring/java ---->记录和整理用过的注解以及spring装配bean方式

    spring注解 @Scope:该注解全限定名称是:org.springframework.context.annotation.Scope.@Scope指定Spring容器如何创建Bean的实例,S ...

  7. 【分布式搜索引擎】Elasticsearch如何部署以及优化查询性能

    一.Elasticsearch生产集群如何部署 (1)es生产集群部署5台机器,若每台机器是6核64G的,那么集群总内存是320G (2)假如我们es集群的日增量数据大概是2000万条,每天日增量数据 ...

  8. 深入理解Plasma(一)Plasma 框架

    这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等.本篇文章作为开篇,主要目的是理解 Plasma 框架. Plasma 作为以太坊的二层扩容框架, ...

  9. phpldapadmin操作指导

    1.在浏览器中打开http://IP/phpldapadmin 2. 点击[Login]按钮,输入管理员密码. 3.点击[创建新条目]. 4. 点击[Generic: Postfix Group]. ...

  10. Oracle判断周末

    有些业务场景下会有择出周末的需求,具体判断语句如下: 1.SELECT TO_CHAR(TO_DATE(DATA_DATE,'YYYY-MM-DD),'D') FROM DUAL; 如果DATA_DA ...