Processing math: 100%

SRM146 DIV1 300

数学题,分析如下:

宽度w、高度h的矩形(包括正方形)在宽度width、高度height的矩形中所含个数是:(widthw+1)(heighth+1)

因此所求不等边矩形个数:

sum=widthw=1heighth=1(widthw+1)(heighth+1)min(width,height)w=1(widthw+1)(heightw+1)=widthw=1heighth=1widthheightmin(width,height)w=1(widthw+1)(heightw+1)=(1+width)width/2(1+height)height/2min(width,height)w=1(widthw+1)(heightw+1))_

注意下划线所指式子要用程序循环累加来计算

复制代码
 1 class RectangularGrid:
 2     def countRectangles(self, width, height):
 3         mn = min(width, height)
 4         return int((1+width)*width/2) * int((1+height)*height/2) - countSquares(width,height)
 5 
 6 
 7 def countSquares(width, height):
 8     sum = 0
 9     k = min(width, height)
10     for x in range(1, k+1):
11         sum += (width-x+1) * (height-x+1)
12     return sum
13 
14 
15 # test
16 o = RectangularGrid()
17 
18 # test case
19 assert(o.countRectangles(3,3) == 22)
20 assert(o.countRectangles(5,2) == 31)
21 assert(o.countRectangles(10,10) == 2640)
22 assert(o.countRectangles(1,1) == 0)
23 assert(o.countRectangles(592,964) == 81508708664)
View Code
复制代码

PS:好多人直接用O(width*height)的算法累加来计算的,比赛中为了编码速度,应该是可以接受的吧

posted @   valaxy  阅读(202)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示