题目链接:http://codeforces.com/contest/1130/problem/B
思路:
贪心题。定义结构体数组a,a[i].x[0],a[i].x[1]分别表示i出现的第一个下标和第二个下标。从i到i+1过程中,只有两种可能,即Sasha选择a[i+1].x[0]或Sasha选择a[i+1].x[1],仔细想一下,模拟一下,会发现选择其中需要步数最小的即可。详见代码:
1 #include2 using namespace std; 3 4 struct node{ 5 int x[2],k; 6 }a[100005]; 7 8 int n,p1,p2,tmp; 9 long long res;10 11 int main(){12 scanf("%d",&n);13 for(int i=1;i<=n;++i)14 a[i].k=0;15 for(int i=1;i<=2*n;++i){16 scanf("%d",&tmp);17 a[tmp].x[a[tmp].k++]=i; 18 }19 p1=p2=1;20 for(int i=1;i<=n;++i){21 int tmp1=abs(a[i].x[0]-p1)+abs(a[i].x[1]-p2),tmp2=abs(a[i].x[0]-p2)+abs(a[i].x[1]-p1);22 if(tmp1