遥远的记忆

遥远的记忆

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

题目分析
题目的本意就是告诉你一串序列,根据这串序列去判断另一个序列的有多少种不同的值

方法一:模拟

直接按照题目的意思模拟即可,但是要注意先后顺序,也就是说循环遍历的顺序,最后我们直接用set统计一下有多少个不同的值就是答案

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <set>
#include <map>
#include <math.h>
#include <vector>
#include <queue>
#include <string.h>
typedef long long ll;
using namespace std;
#define pi acos(-1.0)
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int a[maxn], c[maxn];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &c[i]);
        a[i] = i;
    }
    for (int i = 2; i <= n; ++i)
        if (c[i] == 0)
            a[i] = a[i - 1];
    for (int i = n - 1; i >= 1; --i)
        if (c[i])
            a[i] = a[i + 1];
    set<int> s;
    for (int i = 1; i <= n; ++i)
        s.insert(a[i]);
    printf("%d\n", s.size());
}

方法二:找规律

#include <bits/stdc++.h>
using namespace std;

#define maxn 500005

int n, m, ans = 1;
int a[maxn];

int main()
{

    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i < n; i++)
        if (a[i] == 0 && a[i + 1] == 1)
            ans++;
    cout << ans;
    return 0;
}
牛客比赛系列题解 文章被收录于专栏

加油加油

全部评论
大佬能解释为什么这样找规律是对的吗
点赞 回复 分享
发布于 2022-07-04 19:46

相关推荐

魔法恐龙:这真得给个机会,面试的时候问问不吃饭78.5h怎么做到的
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务