codeforce 253C Text Edior
题目大意,在一个TXT编译器中,命令从光标起始点s到终点e的最小距离,定义向右、向左到最后时不会换行,最顶层不能再向上移动、最底层不能向下移动。如果光标在A行最后,向邻近B行移动,但是B行字数小于A行,光标将移动到B行末尾。
题目思路:寻找中间行(并非在是S与E中间),且与起点对齐(如果中间没有最后特殊情况的话,否则缩进)。答案就是中间行到起点和到终点的纵列距离之和,加上与终点的横行距离。
//核心代码
int slove()
{
for(int i=1;i<=n;i++){
up=min(i,min(r1,r2));
down=max(i,max(r1,r2));
col=c1;
for(int j=up;j<=down;j++){
col=min(col,a[j]+1);
}
int anss=abs(c2-col)+abs(i-r1)+abs(i-r2);
ans=min(ans,anss);
}
return ans;
}
这道题带来的收获,如果某问题直接不容易求解,可将其转化为另一个简单问题求解,化繁为简思想。