水题。。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=55;
struct Square{
int len;
int l,r;
void getbBoundary(Square *s,int index){
l=0;
for(int i=0;i<index;++i){
l=max(l,s[i].r-abs(s[i].len-len));
}
r=l+2*len;
}
};
int n;
Square s[MAXN];
void solve(){
for(int i=0;i<n;++i){
for(int j=i+1;j<n;++j){
if(s[i].len<s[j].len){
s[i].r=min(s[i].r,s[j].l);
}
else s[j].l=max(s[i].r,s[j].l);
}
}
bool first=true;
for(int i=0;i<n;++i){
if(s[i].l<s[i].r){
if(first) cout<<i+1;
else cout<<' '<<i+1;
first=false;
}
}
cout<<endl;
}
int main(){
ios::sync_with_stdio(false);
while(cin>>n,n){
for(int i=0;i<n;++i){
cin>>s[i].len;
s[i].getbBoundary(s,i);
}
solve();
}
return 0;
}