题意:给定一列数组,同构改变每个元素的符号来操纵最后的和,求一种改变方案,使最终的和大于等于零小于等于a1.注意到输入的限制 a[i-1]<=a[i]<=2*a[i-1];
做法:递推公式 x=a[n]-a[n-1]<=a[n-1],abs(a[n-2]-x)<=a[n-2],....依次递推,最后推到a1项,得到的值符合题意.那么,建立一个记录变化的数组t,和一个记录当前符合的变量ope,就可以了。具体看出程序...
#include<cstdio>
#include<cstring>
#include<cstring>
#define LMT 100005
//这根本就是递推...,数列题记得用一下递推公式...an-a(n-1)
bool t[LMT],fu[LMT];
int a[LMT],s;
int main(void)
{
int n;
bool op;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=n-1;i>=0;i--)
if(s>=a[i])s-=a[i];
else
{
s=a[i]-s;
t[i]=1;
}
op=0;
for(int i=0;i<n;i++)
{
op^=t[i];
printf("%c",op?'+':'-');
}
return 0;
}