Snake Matrix 模拟 数学规律

Snake Matrix 模拟 数学规律_第1张图片

显然 当N开到2*10^5,不可能有那么大的数组给你放,空间肯定不够

那么显然就是一道找规律的题了

类似的题做的多了,就知道窍门了 虽然还是花了30+分钟 但思路很清晰

设K为N*N的左上角的值,显然K的递增规律为 k2=k1+4N-4

f(n,i,k)表示对起始值为k的N*N方阵,第i行的和为...

那么就很清晰了...

           k .......................k+n-1

           ...............................

第i行:4n-3-(i-1)........k+n+i-2

           ..................................

           k+3n-3...................k+2n-2

类似的 递归计算即可

import java.util.Scanner;
public class Main{
	static long ans[] ;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		long k = 1;
		ans = new long[n+1];
		for (int i = 1; i < ans.length; i++) {
			ans[i] = f(n,i,k);
		}
		for (int i = 1; i < ans.length; i++) {
			System.out.println(ans[i]);
		}
		
	}

	private static long f(int n, int i, long k) {
		if(i==1) return (2*k+n-1)*n/2;	//(k+k+n-1)*n/2
		else if (i==n) return (2*k+5*n-5)*n/2;	//(k+2n-2+k+3n-3)*n/2
		return  k+n+i-2 + k+4*n-3-i + f(n-2,i-1,k+n*4-4);
	}
}

 

你可能感兴趣的:(JAVA,数学规律,模拟,OJ,Test,水题,JAVA,模拟,数论,数学-公式推导,规律/递归)