Codeforces Round #725 (Div. 3)A. Stone Game

给一个数组, 可以从两端取数字, 取了就没了, 求最少多少步可以取了最大和最小值.

这题他妈的真费时间, 一共3种取法 (答案给的是四种), 反正我三种做的, 三种是: 从左往右取, 从右往左和两侧取.

这题给了最大值是n, 最小值是1, 所以1/2两种都很好做, 就是第三个, 需要找下两个值的坐标, 然后减去两端就行了.

static class TaskA {
        public void solve(int testNumber, InputReader in, OutputWriter out) {
            int maxIndex = -1;
            int minIndex = -1;
            int n = in.readInt();
            int[] ary = in.readIntArray(n);
            int left = 0, right = 0, both = 0;
            for (int i = 0; i < n; i++) {
                if (ary[i] == 1)
                    minIndex = i;
                else if (ary[i] == n)
                    maxIndex = i;
            }
            boolean one = false;
            boolean two = false;
            for (int i = 0; i < n; i++) {
                if (ary[i] == 1)
                    one = true;
                else if (ary[i] == n)
                    two = true;
                if (one && two) {
                    left = i + 1;
                    break;
                }
            }
            one = false;
            two = false;
            for (int i = n - 1; i >= 0; i--) {
                if (ary[i] == 1)
                    one = true;
                else if (ary[i] == n)
                    two = true;
                if (one && two) {
                    right = n - i;
                    break;
                }
            }
            both = Math.min(minIndex, maxIndex) + 1 + n - Math.max(minIndex, maxIndex);
            out.printLine(Math.min(Math.min(left, right), both));
        }
 
    }