zoukankan      html  css  js  c++  java
  • Codeforces #624 div3 C

    You want to perform the combo on your opponent in one popular fighting game. The combo is the string ss consisting of nn lowercase Latin letters. To perform the combo, you have to press all buttons in the order they appear in ss. I.e. if s=s="abca" then you have to press 'a', then 'b', 'c' and 'a' again.

    You know that you will spend mm wrong tries to perform the combo and during the ii-th try you will make a mistake right after pipi-th button (1pi<n1≤pi<n) (i.e. you will press first pipi buttons right and start performing the combo from the beginning). It is guaranteed that during the m+1m+1-th try you press all buttons right and finally perform the combo.

    I.e. if s=s="abca", m=2m=2 and p=[1,3]p=[1,3] then the sequence of pressed buttons will be 'a' (here you're making a mistake and start performing the combo from the beginning), 'a', 'b', 'c', (here you're making a mistake and start performing the combo from the beginning), 'a' (note that at this point you will not perform the combo because of the mistake), 'b', 'c', 'a'.

    Your task is to calculate for each button (letter) the number of times you'll press it.

    You have to answer tt independent test cases.

    Input

    The first line of the input contains one integer tt (1t1041≤t≤104) — the number of test cases.

    Then tt test cases follow.

    The first line of each test case contains two integers nn and mm (2n21052≤n≤2⋅105, 1m21051≤m≤2⋅105) — the length of ss and the number of tries correspondingly.

    The second line of each test case contains the string ss consisting of nn lowercase Latin letters.

    The third line of each test case contains mm integers p1,p2,,pmp1,p2,…,pm (1pi<n1≤pi<n) — the number of characters pressed right during the ii-th try.

    It is guaranteed that the sum of nn and the sum of mm both does not exceed 21052⋅105 (n2105∑n≤2⋅105, m2105∑m≤2⋅105).

    It is guaranteed that the answer for each letter does not exceed 21092⋅109.

    Output

    For each test case, print the answer — 2626 integers: the number of times you press the button 'a', the number of times you press the button 'b', …, the number of times you press the button 'z'.

    Example
    input
    3
    4 2
    abca
    1 3
    10 5
    codeforces
    2 8 3 2 9
    26 10
    qwertyuioplkjhgfdsazxcvbnm
    20 10 1 2 3 5 10 5 9 4
    
    output
    4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 9 4 5 3 0 0 0 0 0 0 0 0 9 0 0 3 1 0 0 0 0 0 0 0 
    2 1 1 2 9 2 2 2 5 2 2 2 1 1 5 4 11 8 2 7 5 1 10 1 5 2 


    这题数字可能比较大,直接遍历必然超时,我们记录每个错误的位置,在该位置之前的每个字母必然+1,倒序求一个前缀和就行了
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #define ll long long
    const int N=1e6+10;
    using namespace std;
    typedef pair<int,int>PII;
    int t;
    int n,m;
    string s;
    int a[N];
    int d[N];
    int ans[N];
    int main(){
     ios::sync_with_stdio(false);
       cin>>t;
         while(t--){
           cin>>n>>m>>s; memset(a,0,N);  memset(ans,0,N);
             for(int i=0;i<m;i++){
           int q;
           cin>>q;
           a[--q]++;
         }
         for(int i=n-2;i>=0;i--){
                a[i]+=a[i+1];
         }
         for(int i=0;i<n;i++){
            ans[s[i]-'a']+=1+a[i];
         }
         for(int i=0;i<26;i++)  cout<<ans[i]<<" ";
         cout<<endl;
         }
      return 0;
    }
  • 相关阅读:
    xtrabackup执行备份要拥有的权限
    CentOS 7 下yum安装xtrabackup备份工具
    MySQL read_only选项的作用
    Linux进程管理命令
    MySQL二进制日志中保存的上下文信息
    MySQLdb的安装
    MySQL The password hash doesn't have the expected format.
    web框架本质
    进程和线程
    good blog
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12378534.html
Copyright © 2011-2022 走看看