zoukankan      html  css  js  c++  java
  • 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("
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/zzyh/p/15253098.html
Copyright © 2011-2022 走看看