三连
码蹄集-三连
题目
输入输出
代码
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int* a=new int[n];
int sum = 0,aver=0,sum_=0;//sum表示数组总和,sum_表示每段之和
for (int i = 1;i <= n;i++) {
cin >> a[i];
sum += a[i];
}
//不能分为三段
if (sum % 3 != 0) {
cout << 0 << endl;
}
//可能分为三段
else {
bool tag = 1;
aver = sum / 3;
for (int i = 1;i <= n;i++) {
sum_ += a[i];
if (sum_ == aver)
sum_ = 0;
else if (sum_ > aver) {
cout << 0 << endl;
tag = 0;
break;
}
}
if (tag != 0) {
cout << 1 << endl;
}
}
return 0;
}
总结
答案只有0和1两种情况。
显然,若能够划分,每一小段的和必然为总和的三分之一(aver),故首先排除总和无法被3整除的情况,对于总和可以被3整除的情况,顺序遍历数组,看能否恰好达到aver。