zoukankan      html  css  js  c++  java
  • B. Ilya and Queries

    题目链接:http://codeforces.com/problemset/problem/313/B

    题目的意思就是:给你一个字符串它只有# 和 . 字符,给你一段区间让你统计[x,y] ,让你统计这个区间内 s[i] = s[i+1] 的个数

    思路:

    感觉有点像前缀和的思想。 

    我们统计前i个 s[i] = s[i+1] 的个数计作dp[i] 

    例如:  . . # # 

    dp[1] = 0

    dp[2] = 1

    dp[3] = 1

    dp[4] = 2   

    如果 s[i] = s[i-1] , dp[i] = dp[i-1] + 1    在它之前i-1的基础上+1就可以了

    如果 s[i] != s[i-1] ,dp[i] = dp[i-1]    那么前i个和前i-1个都是一样的

    最后我们查找区间[x,y] 的时候,因为数组下标从0开始的 , dp[1] 代表从s[0]->s[1]

    所以查找应该是dp[y-1] - dp[x-1] (这里和前缀和的查找有些不同,因为后一个都是和前一个比较)

    AC代码:

    #include <cstdio>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <cstdbool>
    #include <string.h>
    #include <math.h>
    
    using namespace std;
    
    
    
    int
    main()
    {
        int i,j,n,x,y,m,f[110000],max;
        char a[110000];
        cin >> a;
        m=strlen(a);
        f[0]=0;
        for(i=1;i<m;i++)
        {
            if(a[i]==a[i-1])
            {
                f[i]=f[i-1]+1;
            }
            else f[i]=f[i-1];
        }
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%d",&x,&y);
            printf("%d
    ",f[y-1]-f[x-1]);
        }
    
        return 0;
    }
  • 相关阅读:
    第32周二
    第32周一
    第31周日
    第31周六
    第31周五
    第31周四
    第31周三
    C++中this指针的使用方法.
    ArcPad 10 的安装部署
    UEditor用法
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11162201.html
Copyright © 2011-2022 走看看