蒟蒻代码,全没过,不知道为什么,求佬解答
查看原帖
蒟蒻代码,全没过,不知道为什么,求佬解答
592342
WA_automat楼主2022/5/10 16:46
#include<iostream>
using namespace std;
int min(int* data, int left, int right);				// 求left到right之间最小的最小值
void clear(int* data, int min, int left, int right);	// 对数组中的某段区域减掉当中的最小值
int iszero(int* data, int num);							// 判断整个数组是否都为0
int main(void) {
	int n;
	int result = 0;
	int d[100000];
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> d[i];
	}
	while (!iszero(d, n)) {
		int left = 0;
		int right = 0;
		while (left < n && right < n) {
			left = right;
			while (d[left] == 0) {
				++left;
				if (left == n)
					break;
			}
			right = left;
			while (d[right] != 0) {
				++right;
				if (right == n)
					break;
			}
			int temp = min(d, left, right);
			if (temp != 0) {
				++result;
			}
			clear(d, temp, left, right);
		}
	}
	cout << result << endl;
	return 0;
}
int min(int* data, int left, int right){
	int min = data[left];
	for (int i = left + 1; i < right; ++i) {
		if (min > data[i]) {
			min = data[i];
		}
	}
	return min;
}
void clear(int* data, int min, int left, int right) {
	for (int i = left; i < right; ++i) {
		data[i] -= min;
	}
}
int iszero(int* data, int num) {
	for (int i = 0; i < num; i++) {
		if (data[i] != 0) {
			return 0;
		}
	}
	return 1;
}
2022/5/10 16:46
加载中...