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;
    }
  • 相关阅读:
    Basic and Digest Access Authentication 及HttpClient实现
    SQL Server2000 解析XML
    ashx+jQuery,一个轻量级的asp.net ajax解决方案
    sql 获取整时 整分秒 数据
    无法使用前导.. 在顶级目录上退出
    sql查询分析器调用自定义函数
    SqlServer 重置自动编号起始值
    asp.net不使用ViewState和服务器控件
    解决 "错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS
    ASP.NET服务器控件几乎都有的成员
  • 原文地址:https://www.cnblogs.com/lr599909928/p/12378534.html
Copyright © 2011-2022 走看看