南京网站南京网站开发,住房和城乡建设部监理网站,微信扫码关注登陆wordpress,互联网网站开发的未来方向原题链接 http://codeforces.com/contest/486/problem/C 这个C题显然更水一些 步数可以分为两种 上下一种 左右一种 总步数最小 上下最小左右最小 先讨论上下最小 就是从两个方向去由字母1到字母2 min(dis(A,B),26-dis(A,B)); 然后讨论左右最小 pos是起始指针的位置 1-统一在…原题链接 http://codeforces.com/contest/486/problem/C 这个C题显然更水一些 步数可以分为两种 上下一种 左右一种 总步数最小 上下最小左右最小 先讨论上下最小 就是从两个方向去由字母1到字母2 min(dis(A,B),26-dis(A,B)); 然后讨论左右最小 pos是起始指针的位置 1-统一在前半段操作pos要是在后半段就“映射”到前半段,posn1-pos; 2-若上下操作为0 那么左右直接也是0 3-找出左边第一个操作l 右边第一个操作r 一 若是 poslr 返回 r-pos 二, 若是 lrpos 返回 pos-l 三,若是 lposr 返回 min(r-pos,pos-l) 结束 附代码: 1 #include iostream2 #include cmath3 typedef long long LL;4 using namespace std;5 int a[110000],f[100000];6 7 int main()8 {9 int n,pos;
10 while (cinnpos)
11 {
12 if (posn/2) posn1-pos;
13 LL ans0;
14 char temp;
15 for (int i1;in;i)
16 {
17 cintemp;
18 a[i]temp-a1;
19 }
20 for (int i1;in/2;i)
21 {
22 int dis abs(a[i]-a[n-i1]);
23 f[i]min(dis,26-dis);
24 ansf[i];
25 }
26 if (ans0) {cout0endl;continue;}
27 int l1,rn/2;
28 while(!f[l]lr);
29 l--;
30 while(!f[r--]lr);
31 r;
32 if (posr) anspos-l;
33 if (posl) ansr-pos;
34 if (posrposl) ans(r-l)min(r-pos,pos-l);
35 coutansendl;
36 }
37 return 0;
38 } 转载于:https://www.cnblogs.com/fuzhongqing/p/4093570.html