• codeforces B. Ilya and Queries 解题报告


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

    题目意思:给出一个只有 "."  和  "#" 组成的序列s,问当给定一个区间 [li, ri] 时,si = si + 1(".." 或者 "##")的个数。(li ≤ i < ri

      直接做绝对会超时,所以需要离线处理。开一个不比 105小的数组,存储当前得到的最多si = si + 1的数量。感觉上有点像DP的思想......

          最后根据给定的 l  和 r,数组下标为 r-1 的数量 - 数组下标为 l-1 的数量即可(数组下标从0开始)

        

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 1e5 + 10;
     8 int cnt[maxn];
     9         
    10 int main()
    11 {
    12     int i, m, l, r, c;
    13     string s, tmp;
    14     cin >> s;
    15     l = s.size();
    16     memset(cnt, 0, sizeof(cnt));
    17     c = 0;
    18     for (i = 0; i+1 < l; i++)
    19     {
    20         tmp = s.substr(i, 2);
    21         if (tmp == ".." || tmp == "##")
    22             c++;
    23         cnt[i+1] = c;
    24     }
    25     scanf("%d", &m);
    26     for (i = 0; i < m; i++)
    27     {
    28         scanf("%d%d", &l, &r);
    29         printf("%d
    ", cnt[r-1]-cnt[l-1]);      
    30     }    
    31     return 0;
    32 }
    33     
  • 相关阅读:
    主流编程语言
    计算机语言
    IT(Information technology)
    设计模式-学习
    Java 执行顺序
    学习大纲
    Springboot注解整理 二《自定义注解》
    IntelliJ IDE 基础经验备案三
    IntelliJ IDE 基础经验备案二
    Mybatis使用经验归档
  • 原文地址:https://www.cnblogs.com/windysai/p/3534151.html
Copyright © 2020-2023  润新知