Codeforces Round #545 (Div. 2)A. Sushi for Two

Posted guaguastandup

tags:

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

全世界最笨的人

出现了

技术图片

 

这题真的好欺骗我的感情,表面上先给我过了,让我快乐一下,背地里再把我给踢掉

TUT干嘛这么坏啊!!!!!!!!!!!!!

好吧,其实这个错误昨天晚上就反过了

但是世界上最笨的女同学她是不会改的

如果你下次还不改

那你还是世界上最笨的女同学

如果你改了

那你......

TUT...

我们来分析一下,为什么这个女同学,连A题都过不了

这题的题意很简单,就是要求长得像AAABBB的序列的最大值

我先选了一种很弱智的方法

就是,先求前面那个连续序列的长度,再求后面那个连续序列的长度 两个两个求

也没把答案存在数组里.........很傻

第二种方法

就是那个欺骗我感情的方法

#include<bits/stdc++.h>
using namespace std;
#define re register
#define sys system("pause");
inline int read(){
    re int x=0,f=1;char c=getchar();
    while(c<0||c>9){if(c==-) f=-1;c=getchar();}
    while(c>=0&&c<=9) x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*f;
}
int a[100010];
int dp[100010];
int main(){
    int n;
    n = read();
    int j,num;
    for (int i = 1; i <= n;i++)
        a[i] = read();
    int ans = 1;
    int cnt = 0;
    for (int i = 1; i <= n;i++){
        cnt++;
        dp[cnt] = 1;
        for ( j =i ; j+1 <= n;j++){
            if(a[j]==a[j+1]){
                dp[cnt]++;
            }
            else{
                i = j;
                break;
            }     
        }
    }
        for (int i = 1; i <= cnt; i++)
        {
            num = min(dp[i], dp[i + 1]);
            ans = max(num, ans);
        }
    cout << ans * 2;
    return 0;
}

 

不知道改进之后对不对,cf上现在还不能交

不过我感觉应该没什么问题了

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define re register
#define sys system("pause");
inline int read(){
    re int x=0,f=1;char c=getchar();
    while(c<0||c>9){if(c==-) f=-1;c=getchar();}
    while(c>=0&&c<=9) x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*f;
}
int a[100010],dp[100010],j,num,ans=1,cnt,n;
int32_t main(){
    n = read();
    for (int i = 1; i <= n;i++)
        a[i] = read();
    for (int i = 1; i <= n;i++){
        cnt++;
        dp[cnt] = 1;
        for ( j =i ; j<= n;j++){
            if(a[j]!=a[j+1]){
                dp[cnt] = j - i + 1;
                i = j;
                break;
            }     
        }
    }
    for (int i = 1; i <= cnt-1; i++){
        num = min(dp[i], dp[i + 1]);
        ans = max(num, ans);
    }
    cout << ans * 2;
    sys
    return 0;
}

 

以上是关于Codeforces Round #545 (Div. 2)A. Sushi for Two的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #545 Div. 1自闭记

Codeforces Round #545 (Div. 2) 掉分记

Codeforces Round #545 (Div. 2)D(KMP,最长公共前后缀,贪心)

Codeforces Round #545 (Div. 2)A. Sushi for Two

「日常训练」Woodcutters(Codeforces Round 303 Div.2 C)

Codeforces Round #436 E. Fire(背包dp+输出路径)