Java B组蓝桥杯第十届国赛:数正方形

3 篇文章 0 订阅
2 篇文章 0 订阅

Java B组蓝桥杯第十届国赛:数正方形

试题 G: 数正方形
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
在一个 N × N 的点阵上,取其中 4 个点恰好组成一个正方形的 4 个顶点,
一共有多少种不同的取法?
由于结果可能非常大,你只需要输出模 10^9 + 7 的余数。

在这里插入图片描述
如上图所示的正方形都是合法的。
【输入格式】
输入包含一个整数 N。
【输出格式】
输出一个整数代表答案。
【样例输入】
4
【样例输出】
20

【数据规模与约定】
对于所有评测用例,2 ≤ N ≤ 1000000。
思路:假设N个点的边长为N-1,比如4个点的正方形边长为3,那么最小的正方形边长即为1x1
从边长1x1的正方形开始数,直到最大的正方形,即(N-1)x(N-1),需要注意:这里对于边长不同的正方形的个数计算中,包含该大小正方形所独有的正方形


例如,上图对于边长3x3正方形的个数计算中,除了最大的3x3的正方形,还有其特有的两个正方形
在这里插入图片描述
例如,上图对于边长2x2正方形的个数计算中,除了最大的2x2的正方形,还有其特有的1个正方形
不难想象,对于某个nxn的正方形,其特有的正方形个数为n-1,加上该nxn的正方形,共有n个正方形

1.边长1x1,个数(N-1)x(N-1)
2.边长2x2,个数2x(N-2)x(N-2)
3.边长3x3,个数3x(N-3)x(N-3)

边长(N-1)x(N-1),个数(N-1)x1x1

相加,得到公式:
( N − 1 ) 2 + 2 ∗ ( N − 2 ) 2 + 3 ∗ ( N − 3 ) 2 + . . . + ( N − 1 ) ∗ 1 2 . (N-1)^{2}+2*(N-2)^{2}+3*(N-3)^{2}+...+(N-1)*1^{2}. (N1)2+2(N2)2+3(N3)2+...+(N1)12.
代码:(Python)

N = int(input())
res = 0
for i in range(N-1):
    res+=pow((N-(i+1)),2)*(i+1)
    res= res%1000000007
print(res)

代码:(Java)

import java.util.Scanner;
public class Blue  
{
	public static void main (String[] args)
	{
        Scanner scanner = new Scanner(System.in);
		long N = scanner.nextLong();
		long res = 0;
		
		for (int i = 0; i < N-1; i++) {
			res+=(N-(i+1))*(N-(i+1))*(i+1);
            res= res%1000000007;
		}	
		System.out.println(res);
	}
}
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值