Codeforces Round #724 (Div. 2)C. Diluc and Kaeya(思維)

題目大意: 一個D、K組成的字符串。求其每個前綴最多能分割成幾個子串,使被分割的每個串的sumD:sumK相等。
題解:每個前綴被分割子串的sumD:sumK的值,就是整個前綴sumD:sumK的值,從左到右掃,累計答案。

#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;

#define N 500001

int t;

char s[N];

int sumd[N],sumk[N];

typedef pair<int,int> PII;

int gcd(int x,int y)
{
    return y==0?x:gcd(y,x%y);
}

int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        scanf("%s",s+1);
        map<PII,int>a;
        for(int i=1;i<=n;i++)
        {
            sumd[i]=sumd[i-1]+(s[i]=='D'?1:0);
            sumk[i]=sumk[i-1]+(s[i]=='K'?1:0);
        }
        for(int i=1;i<=n;i++)
        {
             int dd,kk;
             dd=sumd[i];
             kk=sumk[i];
             //cout<<dd<<"---"<<kk<<endl;
             int gcd_=gcd(dd,kk);
             printf("%d ",++a[make_pair(dd/gcd_,kk/gcd_)]);
        }
        printf("\n");
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章