牛客小白月赛6 字符串丝带

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gtuif/article/details/81874446

链接:https://www.nowcoder.com/acm/contest/136/D
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld

题目描述

    WHZ送给了HtBest一个“字符串丝带”,这条丝带由n个小写字母按照一定的顺序排列组成,HtBest收到新礼物后有许多问题,类似“第i个位置的字母在前i个位置中出现了几次?”,HtBest很希望知道答案,于是求助你帮忙解答。

输入描述:

第一行有2个正整数n,m,分别表示丝带长度和问题个数。
第二行,有n个小写字母,第i个表示丝带第i位的小写字母。
接下来有m行,每行一个正整数 ,表示HtBest的一个问题。

输出描述:

共m行,对于每个问题,给出答案。

示例1

输入

复制

3 3
abc
1
2
3

输出

复制

1
1
1

示例2

输入

复制

4 4
abba
1
2
3
4

输出

复制

1
1
2
2

示例3

输入

复制

7 7
yyuahhy
7
6
5
4
3
2
1

输出

复制

3
2
1
1
1
2
1

备注:

对于100%的测试数据:
1 ≤ n ≤ 1000000
数据量较大,注意使用更快的输入输出方式。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#include<set>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<string>
#define LL long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define lson o<<1
#define rson o<<1|1
using namespace std;
const int maxn = 1e6 + 10;
string s;
int a[maxn];
map<char, int> p;
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    cin >> s;
    p.clear();
    memset(a, 0, sizeof(a));
    for(int i = 0; i < s.size(); i++)
    {
        p[s[i]]++;
        a[i] = p[s[i]];
    }
    int q;
    while(m--)
    {
        scanf("%d", &q);
        printf("%d\n", a[q - 1]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/gtuif/article/details/81874446