Problem:
Score : 300 points

Problem Statement

You are given integers N and K. Find the number of triples (a,b,c) of positive integers not greater than N such that a+b,b+c and c+a are all multiples of K.
The order of a,b,c does matter, and some of them can be the same.

Constraints

1 \leq N,K \leq 2\times 10^5

N and K are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of triples (a,b,c) of positive integers not greater than N such that a+b,b+c and c+a are all multiples of K.

Sample Input 1

3 2

Sample Output 1

9

(1,1,1),(1,1,3),(1,3,1),(1,3,3),(2,2,2),(3,1,1),(3,1,3),(3,3,1) and (3,3,3) satisfy the condition.

Sample Input 2

5 3

Sample Output 2

1

Sample Input 3

31415 9265

Sample Output 3

27

Sample Input 4

35897 932

Sample Output 4

114191

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <iostream>
#include <map>
#include <vector>
#include <stack>
#include <set>
#include <cmath>
#include <climits>
using namespace std;
// int 2,147,483,647
/*
1、数组开得太小了，导致访问到了不该访问的内存区域

2、发生除零错误

3、大数组定义在函数内,导致程序栈区耗尽

4、指针用错了，导致访问到不该访问的内存区域

5、还有可能是程序抛出了未接收的异常
*/
int main(int argc, char *argv[]) {
	int N, K;
	scanf("%d %d", &N, &K);
	int sum = 0;
	// a=b=c || a=b<c
	for (int i = 1; i <= N; i++) {
		int j = i+K-2*(i-1%K);
		if ((i*2)%K == 0) j = i;
		for (; j <= N; j+= K) {
			int k = j+K-2*(j-1%K);
			if ((j*2)%K == 0) k = j;
			for (; k <= N; k += K) {
				if ((i+k)%K == 0) {
					if (i == j && j == k) sum++;
					else if (i == j || j == k) sum += 3;
					else sum += 6;
				}
			}
		}
	}
	printf("%d", sum);
	return 0;
}