关闭

Codeforces Round #229 (Div. 2)C. Inna and Candy Boxes

标签: codeforces
415人阅读 评论(0) 收藏 举报
分类:

题目链接:http://codeforces.com/contest/390/problem/C

题意:题目大意:输入n,k,w,然后给出n个礼物盒的情况,‘1’表示盒子内有糖果,‘0’表示没有,然后给出w次询问,每次询问将[l,r]区间变成标准情况需要几步,标准情况即l-1+k,l-1+2k....的盒子有糖果,其他在该区间上的盒子没有糖果。

思路:一开始想l-1+k,l-1+2k....这样判断下去,但是1e5显然会超时,因此为了优化,我们需要预处理一下以1-k为开头的结果数,dp[i][j]表示说以i为开头,区间[i,j]需要几步。对于任意的[l,r],结果与dp[l%k][r]-dp[l%k][l]+sol(l)一致,l需要特判一下。

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int n, k, w;
char str[N]; //dp[i][j]表示说以i为开头,区间[i+1,j]需要几步
int dp[15][N];

int sol(int x) 
{  
    if (k == 1) 
	{  
        if (str[x-1] == '0') return 1;  
    } 
	else 
	{  
        if (str[x-1] == '1') return 1;  
    }  
    return 0;  
}  

int main()
{
	scanf("%d%d%d%s", &n, &k, &w,str);
	int len = strlen(str);
	memset(dp, 0, sizeof(dp));
	for(int i = 0; i < k ; i++)
	{
		for(int j = i+1; j <= len ; j++)
		{
			dp[i][j] = dp[i][j-1];
			if((j+1-i+k) % k == 0) if(str[j-1] == '0') dp[i][j]++;
			if((j+1-i+k) % k != 0) if(str[j-1] == '1') dp[i][j]++;
		}
	}
	int l , r;
	while(w--)
	{
		scanf("%d%d", &l ,&r);
		int t = l % k;
		int cnt = 0;
		cnt = dp[t][r] - dp[t][l] + sol(l);
		printf("%d\n", cnt);
	}
	return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Codeforces Round #406 (Div. 2):C. Berzerk(记忆化搜索解决博弈问题)

C. Berzerk time limit per test 4 seconds memory limit per test 256 megabytes input standard in...
  • Jaihk662
  • Jaihk662
  • 2017-03-24 15:23
  • 778

【Codeforces Round 375 (Div 2) E】【欧拉回路Fleury算法 或网络流】One-Way Reform 每条边定向使得最多的点满足入度=出度

E. One-Way Reform time limit per test 2 seconds memory limit per test 256 megabytes ...
  • snowy_smile
  • snowy_smile
  • 2016-10-04 10:20
  • 731

Codeforces 432C Prime Swaps【筛法素数预处理+贪心】

C. Prime Swaps time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu...
  • mengxiang000000
  • mengxiang000000
  • 2016-10-11 21:40
  • 416

codeforces 776C Molly's Chemicals(连续子序列和为k的次方的个数)

C. Molly's Chemicals time limit per test 2.5 seconds memory limit per test 512 megabytes input...
  • zwj1452267376
  • zwj1452267376
  • 2017-02-24 02:47
  • 868

Codeforces Round #408 (Div. 2)-C. Bank Hacking-(三种方法)分类讨论,二分,集合

补题速度太慢了,这样可不行啊。 代码里都有解释。 看别人代码有三种写法 set,分类,和二分。 这是个是用分类思想写的,#include using namespace std; /* 一开...
  • qq_35781950
  • qq_35781950
  • 2017-04-19 20:52
  • 136

数学推公式——较难——Codeforces Round #187 (Div. 2)

题目链接: http://codeforces.com/contest/315/problem/C C. Sereja and Contest time limi...
  • CS_liuqing
  • CS_liuqing
  • 2013-06-16 15:34
  • 1992

Codeforces Round #244 (Div. 2)(强连通分量,后缀数组)

A. Police Recruits #include #include #include #include using namespace std; int n; int main() { ...
  • u010660276
  • u010660276
  • 2014-05-23 20:08
  • 418

Codeforces Round #248 (Div. 2) B题 【数据结构:树状数组】

题目链接:http://codeforces.com/contest/433/problem/B 题目大意:给n(1 ≤ n ≤ 105)个数据(1 ≤ vi ≤ 109),其中有m(1 ≤ m ≤...
  • u013912596
  • u013912596
  • 2014-05-24 18:18
  • 705

Codeforces Round #312 (Div. 2) (第三题是位运算,好题)

比赛:点击打开链接 558A - Lala Land and Apple Trees 分析:从0坐标分开,负半轴一个数组,正半轴一个数组,来记录果树的左边和数量,可以用结构体数组来存储数据,其...
  • loveyou11111111
  • loveyou11111111
  • 2015-08-31 16:30
  • 155

faster r-cnn训练问题集

1、出现问题:训练faster rcnn时出现如下报错: File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 108, in a...
  • u012841667
  • u012841667
  • 2016-12-26 16:33
  • 415
    个人资料
    • 访问:45493次
    • 积分:1445
    • 等级:
    • 排名:千里之外
    • 原创:103篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论