| 题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
|---|---|---|---|---|---|
| Inna and Candy Boxes | ★☆☆☆☆ | 答案正确 | 100 | 2015-02-26 15:35:16 | 数组不够大(1) |
已知n个盒子里分别是否有糖,给出若干查询l,r,使得只有第l+k-1,l+2k-1,l+3k-1, ..., ri有糖,需要变更几个盒子的状态(所有变更都是临时的)。
| 390C.cpp代码已折叠
展开折叠内容
|
|---|
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<bitset>
#include<set>
#include<sstream>
#include<utility>
using namespace std;
//数据类型//
#define llu unsigned long long
#define lld long long
//定义默认类型//
typedef lld num;
#define dsi(n) num n;scanf("%lld",&n)
#define si(n) scanf("%lld",&n)
//其它//
#define reset(x) memset(x,0,sizeof(x))
#define ci const num&
#define sqr(x) ((x)*(x))
#define f(i,n) for(num i=1;i<=n;++i)
#define ff(i,r,n) for(num i=r;i<=n;++i)
#define fi(n) f(i,n)
#define f0(i,n) for(num i=0;i!=n;++i)
#define fd(i,n) for(num i=n;i>=1;--i)
#define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
#define rforeach(i,s) for(typeof(s.rbegin()) i=s.rbegin();i!=s.rend();++i)
#define iforeach(i,s) int idx=0;for(typeof(s.begin()) i=s.begin();i!=s.end();++i,++idx)
#define Vector2 pair<num,num>
#define vector2(x,y) make_pair(x,y)
#define x first
#define y second
string s;
num a[100100];//fixed:数组不够大//
int main()
{
dsi(n);
dsi(k);
dsi(q);
cin>>s;
f0(i,s.size())
{
if(i>=k)a[i]=a[i-k]+(s[i]=='1');
else a[i]=(s[i]=='1');
//fixed:删掉调试用的...//
}
fi(q)
{
dsi(l);dsi(r);
--l;--r;
num ans=(r-l+1)/k-(a[r]-a[l-1]);
for(int i=l,j=r-k+1;j<r;++i,++j)//fixed:j<r非<=//
{
if(i>=k)ans+=a[j]-a[i-k];//fixed:i-k不是i-1//
else ans+=a[j];
}
cout<<ans<<endl;
}
return 0;
}
|