hdu5583

Posted congmingyige

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu5583相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <math.h>
 5 
 6 char str[100001];
 7 ///注意在ans+=f[g]*f[g];中,ans是long long,所以运算的两个数至少有一个数是long long,所以f数组选择的类型是长整形
 8 long long f[100001];
 9 
10 int main()
11 {
12     long n,g,pre,len,i,j;
13     long long ans,t,s;
14     scanf("%ld",&n);
15     for (j=1;j<=n;j++)
16     {
17         g=0;
18         pre=-1;
19         ans=0;
20         scanf("%s",str);
21         len=strlen(str);
22         for (i=0;i<len;i++)
23             if (str[i]!=str[i+1])
24             {
25                 g++;
26                 f[g]=i-pre;
27                 ans+=f[g]*f[g];
28                 pre=i;
29             }
30         if (g==1)
31             printf("Case #%ld: %lld\n",j,ans);
32         else
33         {
34             t=0;
35             for (i=1;i<g;i++)
36             {
37                 //(f[x]+1)*(f[x]+1)+(f[y]-1)*(f[y]-1)-f[x]*f[x]-f[y]*f[y]=2*f[x]-2*f[y]+2
38                 s=abs(f[i]-f[i+1]);
39                 if (s>t)
40                     t=s;
41             }
42             t=t*2+2;
43             for (i=2;i<g;i++)
44                 if (f[i]==1)
45                 {
46                     s=(f[i-1]+1+f[i+1])*(f[i-1]+1+f[i+1])-f[i-1]*f[i-1]-1-f[i+1]*f[i+1];
47                     if (s>t)
48                         t=s;
49                 }
50             printf("Case #%ld: %lld\n",j,ans+t);
51         }
52     }
53     return 0;
54 }

 

以上是关于hdu5583的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5583 - Kingdom of Black and White题解

HDU 5583 Kingdom of Black and White 暴力

week7_简单题_C_水题_hdu_5578+F_贪心_hdu_5583

HDU 5583 Kingdom of Black and White(模拟)

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

HDU3247 Resource Archiver(AC自动机+BFS+DP)