摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 失误原因(初次提交分数)
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有糖,需要变更几个盒子的状态(所有变更都是临时的)。

题解

  • 前缀数组a[i]=s[i]+s[i-k]+...+s[0],由于k很小,所以只要枚举(l,r-k+1)~(l+k-1,r)用前缀数组相减的方式求答案即可。

代码

390C.cpp代码已折叠
展开折叠内容
显示/移除行号
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string>
  4. #include<vector>
  5. #include<iomanip>
  6. #include<algorithm>
  7. #include<cstring>
  8. #include<cmath>
  9. #include<bitset>
  10. #include<set>
  11. #include<sstream>
  12. #include<utility>
  13. using namespace std;
  14. //数据类型//
  15. #define llu unsigned long long
  16. #define lld long long
  17. //定义默认类型//
  18. typedef lld num;
  19. #define dsi(n) num n;scanf("%lld",&n)
  20. #define si(n) scanf("%lld",&n)
  21. //其它//
  22. #define reset(x) memset(x,0,sizeof(x))
  23. #define ci const num&
  24. #define sqr(x) ((x)*(x))
  25. #define f(i,n) for(num i=1;i<=n;++i)
  26. #define ff(i,r,n) for(num i=r;i<=n;++i)
  27. #define fi(n) f(i,n)
  28. #define f0(i,n) for(num i=0;i!=n;++i)
  29. #define fd(i,n) for(num i=n;i>=1;--i)
  30. #define foreach(i,s) for(typeof(s.begin()) i=s.begin();i!=s.end();++i)
  31. #define rforeach(i,s) for(typeof(s.rbegin()) i=s.rbegin();i!=s.rend();++i)
  32. #define iforeach(i,s) int idx=0;for(typeof(s.begin()) i=s.begin();i!=s.end();++i,++idx)
  33. #define Vector2 pair<num,num>
  34. #define vector2(x,y) make_pair(x,y)
  35. #define x first
  36. #define y second
  37. string s;
  38. num a[100100];//fixed:数组不够大//
  39. int main()
  40. {
  41. dsi(n);
  42. dsi(k);
  43. dsi(q);
  44. cin>>s;
  45. f0(i,s.size())
  46. {
  47. if(i>=k)a[i]=a[i-k]+(s[i]=='1');
  48. else a[i]=(s[i]=='1');
  49. //fixed:删掉调试用的...//
  50. }
  51. fi(q)
  52. {
  53. dsi(l);dsi(r);
  54. --l;--r;
  55. num ans=(r-l+1)/k-(a[r]-a[l-1]);
  56. for(int i=l,j=r-k+1;j<r;++i,++j)//fixed:j<r非<=//
  57. {
  58. if(i>=k)ans+=a[j]-a[i-k];//fixed:i-k不是i-1//
  59. else ans+=a[j];
  60. }
  61. cout<<ans<<endl;
  62. }
  63. return 0;
  64. }

著作权声明[编辑]

关于[编辑]