小Q定义了一种数列称为翻转数列:

给定整数 n 和 m, 满足 n 能被 2m 整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔 m 个符号翻转一次, 最初符号为'-'。

例如 n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8.

而 n = 4, m = 1, 数列就是: -1, +2, -3, + 4.

小Q现在希望你能帮他算算前 n 项和为多少。

  • 输入描述:

输入包括两个整数 n 和 m (2 <= n <= 10^9, 1 <= m),

并且满足 n 能被 2m 整除。

  • 输出描述:

输出一个整数, 表示前 n 项和。

  • 输入例子:

8

2

  • 输出例子:

8


观察一下发现这个数列每 2m 个数的和都为 m*m
所以看这个数列有多少组,然后乘 m*m 就是结果啦
import java.util.*;

public class FlipSequence {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n =in.nextInt();
            int m =in.nextInt();
            System.out.println(flip(n, m));
        }
    }

    public static long flip(int n, int m) {
        if (n % (2 * m) != 0) {
            return 0;
        }
        long group = n / (2 * m);
        long res = group * m * m;
        return res;
    }
}

Q.E.D.


知识的价值不在于占有,而在于使用