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;
    }
  • 相关阅读:
    unix/linux中图形界面那些事
    vmware虚拟机工具vmware tools介绍及安装排错
    debian软件源source.list文件格式说明
    Python 基础学习 总结篇
    Git 学习(八)其他
    Git 学习(七)标签管理
    Git 学习(六)分支管理
    Git 学习(五)远程仓库
    Git 学习(四)操作修改和版本穿梭
    页面元素定位 XPath 简介
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12378534.html
Copyright © 2011-2022 走看看