喝水问题 - 最少拿起几个瓶子/n/n## 题目描述/n/n你面前有 $n$ 个瓶子,从左到右依次编号为 $1 /sim n$,瓶子可能是空的也可能装着水。/n/n你可以选择一对 $l,r(l /le r)$,然后把 $l/sim r$ 号瓶子中的所有水全部喝完。你想一口气把桌上剩的水全喝完,请问你最少要拿起几个瓶子?/n/n你有可能一个瓶子都不需要拿起来。/n/n## 输入格式/n/n第一行一个整数 $n$。/n/n第二行 $n$ 个整数,第 $i$ 个整数为 $1$ 表示第 $i$ 个瓶子装着水,为 $0$ 表示第 $i$ 个瓶子是空的。/n/n## 输出格式/n/n一行一个整数 $k$,表示最少拿起的瓶子数。/n/n## 样例 #1/n/n### 样例输入 #1/n/n/n5/n0 0 0 1 0/n/n/n### 样例输出 #1/n/n/n1/n/n/n## 样例 #2/n/n### 样例输入 #2/n/n/n6/n0 0 1 1 0 1/n/n/n### 样例输出 #2/n/n/n4/n/n/n## 提示/n/n**【样例说明】/n/n样例 $1$ 中,拿起 $4$ 号瓶子即可。总共拿起 $1$ 个瓶子。/n/n样例 $2$ 中,拿起 $3/sim 6$ 号瓶子可以将所有的水喝完。总共拿起 $4$ 个瓶子。/n/n【数据范围】**/n/n对于 $30/%$ 的数据,保证 $n/le 100$。/n/n对于 $60/%$ 的数据,保证 $n/le 2000$。/n/n对于 $100/%$ 的数据,保证 $1/le n/le 10^5$,$0/le a_i/le 1$。/n/nc++代码内容:cpp/n#include <iostream>/n#include <vector>/nusing namespace std;/n/nint main() {/n int n;/n cin >> n;/n vector<int> bottles(n);/n for (int i = 0; i < n; i++) {/n cin >> bottles[i];/n }/n/n int left = 0;/n int right = n - 1;/n while (left <= right && bottles[left] == 0) {/n left++;/n }/n while (left <= right && bottles[right] == 0) {/n right--;/n }/n/n int count = 0;/n while (left <= right) {/n int temp = 0;/n while (left <= right && bottles[left] == 1) {/n temp++;/n left++;/n }/n if (temp > 0) {/n count++;/n }/n while (left <= right && bottles[left] == 0) {/n left++;/n }/n }/n/n cout << count << endl;/n/n return 0;/n}/n

喝水问题 - 最少拿起几个瓶子

原文地址: https://www.cveoy.top/t/topic/qill 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录