题解:CF1062C Banh-mi
OIerJiang_1017 · · 题解
CF1062C 题目传送门
题目大意
有
解决思路
拿走数字
代码展示
#include<bits/stdc++.h>
#define ll long long
//不开long long见祖宗
using namespace std;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
ll n, T, a[N], f[N];
string s;
ll ksm(ll a, ll b)
{
ll mul = 1;
while(b)
{
if(b % 2 == 1) mul = mul * a % mod;
b /= 2;
a = a * a % mod;
}
return mul;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> n >> T >> s;
for(int i = 1; i <= s.size(); i++)
{
if(s[i-1] == '1') f[i] = 1;
a[i] = a[i-1] + f[i];//前缀和
}
while(T--)
{
int l, r;
cin >> l >> r;
ll p = a[r] - a[l - 1];
ll q = r - l - p + 1;
ll a1 = ksm(2, p) - 1;
ll a2 = ksm(2, q);
cout << a1 * a2 % M << "\n";
}
return 0;
}