PKU 2313
http://d.hatena.ne.jp/shinichiro_h/20060717#1153074365
元のアルゴリズムは
n,a,b,c,r,s,t; main() { scanf("%*d%d",&a); b=a; for(;~scanf("%d",&c);) { t=b-c; r+=abs(t); if(s*t<0) { if(abs(s)<abs(t)) { r-=abs(s); b=a; t=b-c; } else { r-=abs(t); b=c; t=0; } } s=t;a=b;b=c; } printf("%d\n",r); }
こんなんです。
基本的には一緒ですね。
あとは、上のほうが新しくて
//a,c,r,S,T,n;main(b){for(;~scanf("%d",&c);n++<2?a=c:(r+=T=abs(b-c),a>b^b<c?a=b:(r-=S<T?S:(a=c,T)),S=abs(a-c)),b=c);printf("%d",r);} //a,c,r,S,T;main(b){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),a>b^b<c?a=b:(r-=S<T?S:(a=c,T)),S=abs(a-c),b=c);printf("%d",r);} //a,c,r,S,T;main(b){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);T=abs(b-c),a=a>b==b>c?(r+=T,b):S<T?(r+=T-S,0):c,S=abs(a-c),b=c);printf("%d",r);} //a,c,r,S,T;main(b){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),a>b!=b>c?(r-=S<T?S:(a=c,T)):(a=b),S=abs(a-c),b=c);printf("%d",r);} //a,c,r,S,T;main(b){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),a>b==b>c?a=b:(r-=S<T?S:(a=c,T)),S=abs(a-c),b=c);printf("%d",r);} //a,c,r,S,T;main(b){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),(a-b)*(b-c)>0?a=b:(r-=S<T?S:(a=c,T)),S=abs(a-c),b=c);printf("%d",r);} //a,b,c,r,s,S,T;main(){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),s*b>s*c?a=b:(r-=S<T?S:(a=c,T)),S=abs(s=a-c),b=c);printf("%d",r);} //a,b,c,r,s,S,T;main(){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);r+=T=abs(b-c),s*b>s*c?a=b:(r-=S<T?S:T,S<T?:a=c),S=abs(s=a-c),b=c);printf("%d",r);} //a,b,c,r,s,S,T;main(){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);){r+=T=abs(b-c);s*b>s*c?:(r-=S<T?(b=a,S):(b=c,T));S=abs(s=b-c);a=b;b=c;}printf("%d",r);} //n,a,b,c,r,s,t,S,T;main(){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);s=b-c,a=b,b=c){t=b-c;r+=T=abs(t);S=abs(s);if(s*t<0)r-=(S<T?(b=a,S):(b=c,T));}printf("%d",r);} //n,a,b,c,r,s,t,S,T;main(){scanf("%*d%d",&a);for(b=a;~scanf("%d",&c);){t=b-c;r+=T=abs(t);S=abs(s);if(s*t<0)r-=(S<T?(b=a,S):(b=c,T));s=b-c;a=b;b=c;}printf("%d",r);} //n,a,b,c,r,s,t;main(){scanf("%*d%d",&a);b=a;for(;~scanf("%d",&c);){t=b-c;r+=abs(t);if(s*t<0){if(abs(s)<abs(t)){r-=abs(s);b=a;t=b-c;}else{r-=abs(t);b=c;t=0;}}s=t;a=b;b=c;}printf("%d\n",r);}
変数を減らすときにローカルミニマムにはまってしまったのが困った感じですね。