传送门:戳我
题目大意:两个人围着圆桌发肉丸子,一个人顺时针,一个人逆时针,同样的时间只能发同样数量的肉丸子,要求最后在相邻的位置一起停下来,不行输出
No equal partitioning.可行则输出两个人停下来的位置
思路:维护一个前缀和,再维护一个后缀和,扫描一遍,pre[i]==suf[i+1]的地方就是停下来的地方,找不到的话就No equal partitioning.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int a[30+5],pre[30+5],suf[30+5];
int n;
int main(){
while (scanf("%d",&n)!=EOF){
if (n==0) break;
memset(a,0,sizeof(a));
memset(pre,0,sizeof(pre));
memset(suf,0,sizeof(suf));
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
pre[i]=a[i]+pre[i-1];
}
for (int i=n;i>=1;i--){
suf[i]=a[i]+suf[i+1];
}
int pos=0;
for (int i=1;i<=n-1;i++){
if (pre[i]==suf[i+1]){
pos=i;
break;
}
}
if (pos){
printf("Sam stops at position %d and Ella stops at position %d.\n",pos,pos+1);
continue;
}
else {
printf("No equal partitioning.\n");
}
}
return 0;
}