• BestCoder Round #81 (div.2)C String


    总体思路好想,就是在找K个不同字母的时候,卡时间。

    看了大神代码,发现goto的!!!!998ms

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<iostream>
     5 #include<queue>
     6 #include<stack>
     7 #include<cmath>
     8 #include<algorithm>
     9 #include<malloc.h>
    10 using namespace std;
    11 #define clc(a,b) memset(a,b,sizeof(a))
    12 #define inf 0x3f3f3f3f
    13 const int N=10010;
    14 #define LL long long
    15 const double eps = 1e-5;
    16 const double pi = acos(-1);
    17  int g[1010][1010];
    18 inline int r(){
    19     int x=0,f=1;char ch=getchar();
    20     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
    21     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    22     return x*f;
    23 }
    24 int num[30];
    25 int jude(){
    26     int ans=0;
    27     for(int i=0;i<27;i++){
    28         ans+=(num[i]!=0);
    29     }
    30     return ans;
    31 }
    32 char s[1000010];
    33 int main(){
    34     int T,k;
    35     scanf("%d",&T);
    36     while(T--){
    37         clc(num,0);
    38         scanf("%s",s+1);
    39         scanf("%d",&k);
    40         int len=strlen(s+1);
    41         int j=0;
    42         LL ans=0;
    43         for(int i=1;i<=len;i++){
    44                while(jude()!=k){
    45                     j++;
    46                     if(j>len) goto l;
    47                     num[s[j]-'a']++;
    48                }
    49                if(j>len) break;
    50                num[s[i]-'a']--;
    51                ans+=len-j+1;//这样每次枚举K个不同的字符串,不会有覆盖的情况
    52         }
    53         l:;
    54         printf("%I64d
    ",ans);
    55     }
    56     return 0;
    57 }
    View Code

    优化代码180ms:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<iostream>
     5 #include<queue>
     6 #include<stack>
     7 #include<cmath>
     8 #include<algorithm>
     9 #include<malloc.h>
    10 using namespace std;
    11 #define clc(a,b) memset(a,b,sizeof(a))
    12 #define inf 0x3f3f3f3f
    13 const int N=10010;
    14 #define LL long long
    15 const double eps = 1e-5;
    16 const double pi = acos(-1);
    17  int g[1010][1010];
    18 inline int r(){
    19     int x=0,f=1;char ch=getchar();
    20     while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
    21     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    22     return x*f;
    23 }
    24 char s[1000010];
    25 LL ans;
    26 int a[30];
    27 int main(){
    28     int T;
    29     scanf("%d",&T);
    30     while(T--){
    31         clc(a,0);
    32         scanf("%s",s+1);
    33         int len=strlen(s+1);
    34         int k;
    35         ans=0;
    36         scanf("%d",&k);
    37         if(k==1){
    38             ans=((len+1)*len)/2;
    39             printf("%I64d
    ",ans);
    40             continue;
    41         }
    42         for(int i=0;i<26;i++){
    43             a[i]=0;
    44         }
    45         int l=0;
    46         int j=1;
    47         for(int i=1;i<=len;i++){
    48             if(a[s[i]-'a']==0){
    49                  a[s[i]-'a']++;
    50                  l++;
    51             }
    52             else 
    53                 a[s[i]-'a']++;
    54             if(l>=k){
    55                 ans+=len-i+1;
    56                 for(;j<i;j++){
    57                     a[s[j]-'a']--;
    58                     if(a[s[j]-'a']==0){
    59                         l--;
    60                         j++;
    61                         break;
    62                     }
    63                     else{
    64                         ans+=len-i+1;
    65                     }
    66                 }
    67             }
    68         }
    69         printf("%I64d
    ",ans);
    70     } 
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    含有打印、统计DataGridView(1)
    数字金额转换大写人民币
    文件加密解密全解
    正则表达式之全部符号对照表
    C#程序集引入无效的解决方法
    TreeView 的简单实用
    Win7下用IIS发布网站
    C#做完一个网站怎么发布?
    c# 如何获取项目的根目录
    判断控件是否出现了滚动条
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5423285.html
Copyright © 2020-2023  润新知