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;
    }
    
  • 相关阅读:
    commons-dbutils实现增删改查(spring新注解)
    commons-dbutils实现增删改查
    配置扫描注解的包
    常用注解
    注入集合类型数据
    spring创建bean的三种方式
    switch
    jvm编译器的优化
    java9小工具jshell
    java三元运算符
  • 原文地址:https://www.cnblogs.com/zzyh/p/15253098.html
Copyright © 2011-2022 走看看