zoukankan      html  css  js  c++  java
  • BestCoder Round #88

    传送门:BestCoder Round #88

    分析:

    A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了;

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <ctime>
     5 #include <cmath>
     6 #include <iostream>
     7 #include <algorithm>
     8 #include <string>
     9 #include <set>
    10 #include <map>
    11 #include <queue>
    12 #include <stack>
    13 #include <vector>
    14 #include <bitset>
    15 using namespace std;
    16 
    17 #define ll long long
    18 #define F(i,a,b) for(int i=a;i<=b;++i)
    19 #define R(i,a,b) for(int i=a;i<b;++i)
    20 #define Rof(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
    21 #define rek(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
    22 #define mem(a,b) memset(a,b,sizeof(a))
    23 #define cpy(a,b) memcpy(a,b,sizeof(b))
    24 #pragma comment(linker, "/STACK:102400000,102400000")
    25 inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
    26 char s[100100];
    27 int t,cnt;
    28 ll sum;
    29 int main()
    30 {
    31     for(scanf("%d",&t);t--;)
    32     {
    33         scanf("%s",s);int len=strlen(s);cnt=sum=0;
    34         for(int i=0;i<len;++i) if(s[i]=='q') sum+=cnt,cnt++;else if(cnt) {sum+=cnt;cnt=0;}
    35         if(cnt) sum+=cnt;
    36         printf("%lld
    ",sum);
    37     } 
    38     return 0;
    39 }
    View Code

    B题求出一个数字串的所有完全阿贝尔周期;

    S是一个数字串,定义函数occ(S,x)occ(S,x)表示S中数字x的出现次数。
    
    例如:S=(1,2,2,1,3),occ(S,1)=2,occ(S,2)=2,occ(S,3)=1S=(1,2,2,1,3),occ(S,1)=2,occ(S,2)=2,occ(S,3)=1。
    
    如果对于任意的i,都有occ(u,i)=occ(w,i)occ(u,i)=occ(w,i),那么我们认为数字串u和w匹配。
    
    例如:(1,2,2,1,3)approx(1,3,2,1,2)(1,2,2,1,3)(1,3,2,1,2)。
    
    对于一个数字串S和一个正整数k,如果SS可以分成若干个长度为k的连续子串,且这些子串两两匹配,那么我们称k是串S的一个完全阿贝尔周期。
    
    给定一个数字串S,请找出它所有的完全阿贝尔周期

    那么对于给定的n,从1-n枚举它的因子比如k,然后判断1-k是否与k+1~2*k,2*k+1~3*k...(t*k<=n)匹配,这里要处理一下,详情见代码
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <ctime>
     5 #include <cmath>
     6 #include <iostream>
     7 #include <algorithm>
     8 #include <string>
     9 #include <set>
    10 #include <map>
    11 #include <queue>
    12 #include <stack>
    13 #include <vector>
    14 #include <bitset>
    15 using namespace std;
    16 
    17 #define LL long long
    18 #define F(i,a,b) for(int i=a;i<=b;++i)
    19 #define R(i,a,b) for(int i=a;i<b;++i)
    20 #define Rof(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
    21 #define rek(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
    22 #define mem(a,b) memset(a,b,sizeof(a))
    23 #define cpy(a,b) memcpy(a,b,sizeof(b))
    24 #pragma comment(linker, "/STACK:102400000,102400000")
    25 inline void read(int &x){x=0; char ch=getchar();while(ch<'0') ch=getchar();while(ch>='0'){x=x*10+ch-48; ch=getchar();}}
    26 int t,n,cnt,a[100010],b[100010],p[100100],p1[100100];
    27 int main()
    28 {
    29     for(scanf("%d",&t);t--;)
    30     {
    31         scanf("%d",&n);cnt=0;
    32         F(i,1,n) scanf("%d",a+i);
    33         for(int i=1;i*i<=n;++i) if(n%i==0)
    34         {
    35             for(int i=0;i<=n;++i) p[i]=p1[i]=0;
    36             int x=n/i;
    37             for(int j=1;j<=i;++j) p[a[j]]++;
    38             for(int k=i*2;k<=n;k+=i) 
    39             {
    40                 for(int j=k-i+1;j<=k;j++) p1[a[j]]++;
    41                 for(int j=1;j<=i;++j) if(p[a[j]]*(k/i-1)!=p1[a[j]]) goto l;
    42             }
    43             b[cnt++]=i;l:;
    44             for(int i=0;i<=n;++i) p[i]=p1[i]=0;
    45             for(int j=1;j<=x;++j) p[a[j]]++;
    46             for(int k=x*2;k<=n;k+=x)
    47             {
    48                 for(int j=k-x+1;j<=k;j++) p1[a[j]]++;
    49                 for(int j=1;j<=x;++j) if(p[a[j]]*(k/x-1)!=p1[a[j]]) goto l1;
    50             } 
    51             b[cnt++]=x;l1:;
    52         }
    53         sort(b,b+cnt);
    54         printf("%d",b[0]);
    55         for(int i=1;i<cnt;++i) if(b[i]!=b[i-1])printf(" %d",b[i]);puts("");
    56     }
    57     return 0;
    58 }
    View Code
     
  • 相关阅读:
    Android"寻龙点穴"指南针
    如何获取注册地图API的SHA1值与PackageName?
    如何获取注册地图API的SHA1值与PackageName?
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
    LocationManager的使用
    LocationManager的使用
    Android方向传感器
    Android方向传感器
    Android光线传感器
  • 原文地址:https://www.cnblogs.com/chendl111/p/5926554.html
Copyright © 2011-2022 走看看