CF 253C(找中转行)
来源:互联网 发布:携程数据分析师笔试题 编辑:程序博客网 时间:2024/04/25 09:44
显然除了直接移(先行后列)外,
唯一减少操作数的方法便是向中间以外的行数移,以求降低列的移动数。
一定要注意不是挪到每行直接取abs(行尾-c2)的,因为可能会有往返行尾的路上有更小的,直接取行尾可能拉近它和c2的距离,但是这种操作是不可行的。
#include<cstdio>#include<functional>#include<algorithm>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;#define MAXN (10000+100)int a[MAXN],n;int abs2(int a,int b){if (a<b) return b-a;else return a-b;}int main(){freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);int r1,c1,r2,c2;scanf("%d%d%d%d",&r1,&c1,&r2,&c2);int mi=c1,ans=0,tans=1000000000;if (r1<r2){ans=r2-r1;for (int i=r1+1;i<=r2;i++) mi=min(mi,a[i]+1);tans=min(tans,ans+abs(mi-c2));for (int i=r1-1,cost=2,mii=mi;i>=1;i--,cost+=2){mii=min(mii,a[i]+1);tans=min(tans,ans+cost+abs(mii-c2));}for (int i=r2+1,cost=2,mii=mi;i<=n;i++,cost+=2){mii=min(mii,a[i]+1);tans=min(tans,ans+cost+abs(mii-c2));}}else {ans=r1-r2;for (int i=r1-1;i>=r2;i--) mi=min(mi,a[i]+1);tans=min(tans,ans+abs(mi-c2));for (int i=r2-1,cost=2,mii=mi;i>=1;i--,cost+=2){mii=min(mii,a[i]+1);tans=min(tans,ans+cost+abs(mii-c2));}for (int i=r1+1,cost=2,mii=mi;i<=n;i++,cost+=2){mii=min(mii,a[i]+1);tans=min(tans,ans+cost+abs(mii-c2));}}cout<<tans<<endl;return 0;}
- CF 253C(找中转行)
- CF#710 C. Magic Odd Square (找规律)
- CF找规律
- CF 开车找房子
- 【C++】字符串中找数字
- [CF.Skills]在.NET CF中嵌入Media Player(C#)
- 转行的艰难之 找实习
- cf(找规律,模拟)
- CF - 201A 找规律
- mysql中列转行
- 【opencv+C++】在图像中找四边形
- 【opencv+C++】在图像中找四边形
- CF 622 A. Infinite Sequence【找无限数列中第i个数是几】
- Java转行做C了。
- 在.NET CF中嵌入Media Player(C#)
- CF#280 (Div. 2) A.(找规律)
- CF 615 E Hexagons(找规律)
- 转行
- 应该经常写博客
- OpenGL下实现Alpha混合
- Android Developers Design 中文翻译
- Monkey and Banana
- QT 设置SizePolicy的例子
- CF 253C(找中转行)
- HDOJ2037 今年暑假不AC (经典的贪心问题)
- HDOJ---ACMSteps---1.2.2Climbing Worm
- 评价人的词汇 - 收藏
- Qt 之路 (05)—组件布局
- HDOJ---ACMSteps---1.3.1FatMouse' Trade
- 并行编程我的第一个
- XAML入门教程
- 顶点数组