P9517 drink 题解

发布时间 2023-12-05 15:28:12作者: cq_irritater

P9517 drink 题解

Part 1 提示

  • 题目传送门
  • 欢迎大家指出错误并私信这个蒟蒻
  • 欢迎大家在下方评论区写出自己的疑问(记得 @ 这个蒟蒻)

Part 2 更新日志

  • 2023-08-12 18:06 文章完成
  • 2023-08-14 15:53 文章通过审核

Part 3 解析

这道题考场上用的查找做的。

先用一个结构体分别表示 first last,然后进行查找即可,两个 for 循环分别计算出 firstlast,最后计算它们的差值。 (注意,计算差值时要加 1)

然后你就会发现一个问题:只有 \(90\) 分。

所以我们来思考一下哪里出现了问题。

你会发现:如果全都是 \(0\) 怎么办呢?

所以还要记录是不是全都是 \(0\),如果是就输出 \(0\) 即可得到满分。

Part 4 代码

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 10;

struct cntt
{
	int first, last;
}cnt;

int n;
int a[MAXN];
int cnttt;

int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
		if (a[i] == 0)
		{
			cnttt++;
		}
	}
	if (cnttt == n)
	{
		printf("0");
		return 0;
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] == 1)
		{
			cnt.first = i;
			break;
		}
	}
	for (int i = 1; i <= n; i++)
	{
		if(a[i] == 1)
		{
			cnt.last = i;
		}
	}
	printf("%d", cnt.last - cnt.first + 1);
	return 0;
}