牛客练习赛73_B:遥远的记忆

10 篇文章 0 订阅
9 篇文章 0 订阅

链接https://ac.nowcoder.com/acm/contest/9033/B

思路
A题真的就属于看懂而就是A不掉,总是缺点什么。不过机(F)智(W)如我,很快啊,我就把罪恶的眼光看向了B题。

在这里插入图片描述
B题就很有趣了,题意十分清楚,就是依据题中给出的规则,最多能够得到几个不同的数字
不同的数字是这个题的关键,怎么才会形成不同的数字就是我们要考虑的。

我们首先考虑C1是0的时候,由于题目中是这样说的:

如果c_i = 0,并且 i>1 ,那么a_i = a_{i-1}。

所以我们可以得到,当C1是0时,A1一定是一个不同的数字
(这个地方可以思考一下,表达的不是很好,自己可以举几个例子看看)
同理,当Cn是1时,An一定也是一个独特的数字

我们再看处于序列中间的数字,就有另一个结论:C序列中出现一个连续的“10”就会出现一个新的不同的数字。
这里的话不是很好理解,我们看一下样例吧。

9
1 0 1 1 1 0 0 0 1

我们来推一下样例:

C1=1并且1<9,所以A1的取值取决于A2;
C2=0并且2>1,所以A2的取值取决于A1;

从这里我们能看出,C1和C2形成了一个稳定的集合(无论C3取多少都不会影响这两个),此时我们为A1,A2赋上1,然后继续看:

C3=1并且3<9,所以A3的取值取决于A4;
C4=1并且4<9,所以A4的取值取决于A5;
C5=1并且5<9,所以A5的取值取决于A6;
C6=0并且6>1,所以A6的取值取决于A5;

这个时候5和6又形成了一个不受影响的集合,我们赋值2。此时A1~A6:

1 1 2 2 2 2

我们继续看:

C7=0并且7>1,所以A7的取值取决于A6;
C8=0并且8>1,所以A8的取值取决于A7;

C9=1但是9=9,导致A9不会被其他元素影响,自我稳定,我们赋值3。这个时候A序列为:

1 1 2 2 2 2 2 2 3

所以答案是3。

如果没太看懂可以多看几遍,下面就给出代码。
伊丽莎白!

在这里插入图片描述
代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+500;
int a[maxn];
int main()
{
    int n,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n-1;i++)   //上面提到的结论3
        if(a[i]==1&&a[i+1]==0)
            ans++;
    if(a[n]==1)   //特判结论1和2
        ans++;
    if(a[1]==0)
        ans++;
    cout<<ans<<endl;
}

大脑:A题都没过我能忍它?
我:能忍,做题嘛,不寒碜…
大脑:寒碜,很tm寒碜。这个(指指电脑)+这个(指指头发)能不能在有生之年把A题过了?

在这里插入图片描述
下次再见~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值