洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

[NOIP1997 普及组] 棋盘问题

题目背景

NOIP1997 普及组第一题

题目描述

设有一个 N × M N \times M N×M 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1N100,1M100)

求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。

例如:当 N = 2 , M = 3 N=2, M=3 N=2,M=3 时:

正方形的个数有 8 8 8 个:即边长为 1 1 1 的正方形有 6 6 6 个;边长为 2 2 2 的正方形有 2 2 2 个。

长方形的个数有 10 10 10 个:

  • 2 × 1 2 \times 1 2×1 的长方形有 4 4 4 个:

  • 1 × 2 1 \times 2 1×2 的长方形有 3 3 3 个:

  • 3 × 1 3 \times 1 3×1 的长方形有 2 2 2 个:

  • 3 × 2 3 \times 2 3×2 的长方形有 1 1 1 个:

输入格式

一行两个整数 N , M N,M N,M

输出格式

一行两个整数,表示正方形的个数与长方形的个数。

样例 #1

样例输入 #1
2 3
样例输出 #1
8 10

想法

这道题,可以先数正方形和长方形一共有多少个,再单独数正方形有多少个,最后相减即可算出长方形个数。
第一步:数正方形、长方形总数。我们以 3 × 4 3\times4 3×4棋盘为例:
先看左上角,即第一行第一个,它连接右下方任意格点即可形成一个正方形或长方形。一共 3 × 4 = 12 3\times4=12 3×4=12个选择。
再处理第二个点,一共 2 × 4 = 8 2\times4=8 2×4=8个选择。
第3个点,一共 1 × 4 = 4 1\times4=4 1×4=4个选择。
对于第一行第四个点来说,有 0 × 4 = 0 0\times4=0 0×4=0个选择。
到了第二行第一个点,共 3 × 3 = 9 3\times3=9 3×3=9个选择。
第二个点, 2 × 3 = 6 2\times3=6 2×3=6个选择。
后面就不一一列举了,看下面这幅图:

所以,有 3 × 4 + 2 × 4 + 1 × 4 + 3 × 3 + 2 × 3 + 1 × 3 + 3 × 2 + 2 × 2 + 1 × 2 + 3 × 1 + 2 × 1 + 1 × 1 = 60 3\times4+2\times4+1\times4+3\times3+2\times3+1\times3+3\times2+2\times2+1\times2+3\times1+2\times1+1\times1=60 3×4+2×4+1×4+3×3+2×3+1×3+3×2+2×2+1×2+3×1+2×1+1×1=60个正方形和长方形。
由特殊到一般,对于大小为 x × y x\times y x×y的棋盘,正方形与长方形共有:

t = x y + x ( y − 1 ) + x ( y − 2 ) + ⋯ + x × 1 + ( x − 1 ) y + ( x − 1 ) ( y − 1 ) + ⋯ + ( x − 1 ) × 1 + ⋯ + 1 × 1 = [ x + ( x − 1 ) + ( x − 2 ) + ⋯ + 1 ] [ y + ( y − 1 ) + ( y − 2 ) + ⋯ + 1 ] = x ( x + 1 ) 2 × y ( y + 1 ) 2 = x y ( x + 1 ) ( y + 1 ) 4 \begin{aligned} &t=xy+x(y-1)+x(y-2)+\cdots+x\times1+(x-1)y+(x-1)(y-1)+\cdots+(x-1)\times1+\cdots+1\times1 \\&=[x+(x-1)+(x-2)+\cdots+1][y+(y-1)+(y-2)+\cdots+1] \\&=\frac{x(x+1)}{2}\times\frac{y(y+1)}{2} \\&=\frac{xy(x+1)(y+1)}{4} \end{aligned} t=xy+x(y1)+x(y2)++x×1+(x1)y+(x1)(y1)++(x1)×1++1×1=[x+(x1)+(x2)++1][y+(y1)+(y2)++1]=2x(x+1)×2y(y+1)=4xy(x+1)(y+1)

OK,现在只数正方形。还是以 3 × 4 3\times4 3×4棋盘为例:
先是最小的 1 × 1 1\times1 1×1正方形:共 3 × 4 3\times4 3×4个。
再是 2 × 2 2\times2 2×2正方形,共 2 × 3 = 6 2\times3=6 2×3=6个。
3 × 3 3\times3 3×3正方形: 1 × 2 = 2 1\times2=2 1×2=2
由于的棋盘最短边为 3 3 3,所以不可能再有 4 × 4 4\times4 4×4正方形。因此最大正方形的边长取决于棋盘最短边。
综上,共 3 × 4 + 2 × 3 + 1 × 2 = 20 3\times4+2\times3+1\times2=20 3×4+2×3+1×2=20个正方形。再由特殊推广到一般,对于大小为 x × y x\times y x×y的棋盘:令 k = m i n { x , y } k=min\{x,y\} k=min{x,y},其中 m i n { x , y } min\{x,y\} min{x,y}代表取 x , y x,y x,y中的最小值。
正方形的个数为:
s = x y + ( x − 1 ) ( y − 1 ) + ( x − 2 ) ( y − 2 ) + ⋯ + ( x − k ) ( y − k ) = x y + x y − x − y + 1 2 + x y − 2 x − 2 y + 2 2 + ⋯ + x y − k x − k y + k 2 = ( k + 1 ) x y − ( 1 + 2 + ⋯ + k ) ( x + y ) + ( 1 2 + 2 2 + 3 2 + ⋯ + k 2 ) = ( k + 1 ) x y − k ( k + 1 ) 2 ( x + y ) + ∑ i = 1 k i 2 = ( k + 1 ) x y − k ( k + 1 ) ( x + y ) 2 + k ( k + 1 ) ( 2 k + 1 ) 6 \begin{aligned} &s=xy+(x-1)(y-1)+(x-2)(y-2)+\cdots+(x-k)(y-k)\\ &=xy+xy-x-y+1^2+xy-2x-2y+2^2+\cdots+xy-kx-ky+k^2\\ &=(k+1)xy-(1+2+\cdots+k)(x+y)+(1^2+2^2+3^2+\cdots+k^2)\\ &=(k+1)xy-\frac{k(k+1)}{2}(x+y)+\sum^k_{i=1}i^2\\ &=(k+1)xy-\frac{k(k+1)(x+y)}{2}+\frac{k(k+1)(2k+1)}{6} \end{aligned} s=xy+(x1)(y1)+(x2)(y2)++(xk)(yk)=xy+xyxy+12+xy2x2y+22++xykxky+k2=(k+1)xy(1+2++k)(x+y)+(12+22+32++k2)=(k+1)xy2k(k+1)(x+y)+i=1ki2=(k+1)xy2k(k+1)(x+y)+6k(k+1)(2k+1)

实现

  1. 输入。
  2. 根据刚才的公式直接代数据。
  3. 输出。

题解

C++

#include<iostream>
using namespace std;
int main(){int x,y;cin >> x >> y; //输入int k = min(x,y); //套公式int s = (k + 1) * x * y - k * (k + 1) * (x + y) / 2 + k * (k + 1) * (2 * k + 1) / 6; //正方形int t = (x + 1) * (y + 1) * x * y / 4; //正方形与长方形总数cout << s << ' ' << t - s; //输出return 0;
}

Python

x,y = input().split()
x = int(x)
y = int(y)
k = min(x,y)
s = (k + 1) * x * y - k * (k + 1) * (x + y) / 2 + k * (k + 1) * (2 * k + 1) / 6 #正方形
t = (x + 1) * (y + 1) * x * y / 4 #正方形与长方形总数
print(int(s),int(t - s)) #输出

难度

难度:★★☆☆☆
这道题还是有点难的,虽然放在第一题,但要想写出一个完美的程序还是需要推出公式,说白了这就是道数学题。等到公式推出来了,甚至连判断、循环语句都不需要了,代码简洁得很啊。

结尾

这道题你是怎么AC的?欢迎讨论哦!我们下期再见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL高级-MVCC-undo log 版本链

文章目录 1、undo log2、undo log 版本链2.1、然后&#xff0c;有四个并发事务同时在访问这张表。2.1.1、修改id为30记录&#xff0c;age改为32.1.2、修改id为30记录&#xff0c;name改为A32.1.3、修改id为30记录&#xff0c;age改为10 2.2、总结 1、undo log 回滚日志&#xf…

文件系统(操作系统实验)

实验内容 &#xff08;1&#xff09;在内存中开辟一个虚拟磁盘空间作为文件存储器&#xff0c; 在其上实现一个简单单用户文件系统。 在退出这个文件系统时&#xff0c;应将改虚拟文件系统保存到磁盘上&#xff0c; 以便下次可以将其恢复到内存的虚拟空间中。 &#xff08;2&…

数字孪生煤矿智能化综合管控平台

煤矿可视化通过图扑 HT 实现实时数据集成和三维建模仿真&#xff0c;呈现井下环境、设备状态和生产状况等多维度数据&#xff0c;帮助管理人员进行直观监控和精准分析。该技术提升了运营效率和安全水平&#xff0c;为煤矿作业提供了智能化的管理解决方案&#xff0c;有助于减少…

黑马点评DAY1|Redis入门、Redis安装

什么是Redis&#xff1f; redis是一种键值型数据库&#xff0c;内部所存的数据都是键值对的形式&#xff0c;例如&#xff0c;我们可以把一个用户数据存储为如下格式&#xff1a; 键值id$1600name张三age21 但是这样的存储方式&#xff0c;数据会显得非常松散&#xff0c;因…

云计算HCIE+RHCE学员的学习分享

大一下学期&#xff0c;我从学长嘴里了解到誉天教育&#xff0c;当时准备考RHCE&#xff0c;我也了解了很多培训机构&#xff0c;然后学长强烈给我推荐誉天&#xff0c;我就在誉天报名了RHCE的课程。 通过杨峰老师的教学&#xff0c;我学到了许多Linux知识&#xff0c;也了解了…

笔记本电脑部署VMware ESXi 6.0系统

正文共&#xff1a;888 字 18 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面我们介绍了在笔记本上安装Windows 11操作系统&#xff08;Windows 11升级不了&#xff1f;但Win10就要停服了啊&#xff01;来&#xff0c;我教你&#xff01;&#xff09;&#xff0c;也介绍了…

【单片机毕业设计选题24037】-基于STM32的电力系统电力参数无线监控系统

系统功能: 系统上电后&#xff0c;OLED显示“欢迎使用电力监控系统请稍后”&#xff0c;两秒后显示“Waiting..”等待ESP8266初始化完成&#xff0c; ESP8266初始化成功后进入正常页面显示&#xff0c; 第一行显示电压值&#xff08;单位V&#xff09; 第二行显示电流值&am…

互联网大厂核心知识总结PDF资料

我们要敢于追求卓越&#xff0c;也能承认自己平庸&#xff0c;不要低估3&#xff0c;5&#xff0c;10年沉淀的威力 hi 大家好&#xff0c;我是大师兄&#xff0c;大厂工作特点是需要多方面的知识和技能。这种学习和积累一般人需要一段的时间&#xff0c;不太可能一蹴而就&…

VMware虚拟机迁移:兼用性踩坑和复盘

文章目录 方法失败情况分析&#xff1a;参考文档 方法 虚拟机关机&#xff0c;整个文件夹压缩后拷贝到新机器中&#xff0c;开机启用即可 成功的情况&#xff1a; Mac (intel i5) -> Mac (intel i7)Mac (intel, MacOS - VMware Fusion) -> DELL (intel, Windows - VMw…

Zynq7000系列FPGA中的DMA控制器简介(二)

AXI互连上的DMA传输 所有DMA事务都使用AXI接口在PL中的片上存储器、DDR存储器和从外设之间传递数据。PL中的从设备通过DMAC的外部请求接口与DMAC通信&#xff0c;以控制数据流。这意味着从设备可以请求DMA交易&#xff0c;以便将数据从源地址传输到目标地址。 虽然DMAC在技术…

mysql5.7安装使用

mysql5.7安装包&#xff1a;百度网盘 提取码: 0000 一、 安装步骤 双击安装文件 选择我接受许可条款–Next 选择自定义安装&#xff0c;下一步 选择电脑对应的系统版本后(我的系统是64位)&#xff0c;点击中间的右箭头&#xff0c;选择Next 选择安装路径–Next 执行…

matlab可以把图像数据转换为小波分析吗

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

【后端面试题】【中间件】【NoSQL】ElasticSearch 节点角色、写入数据过程、Translog和索引与分片

中间件的常考方向&#xff1a; 中间件如何做到高可用和高性能的&#xff1f; 你在实践中怎么做的高可用和高性能的&#xff1f; Elasticsearch节点角色 Elasticsearch的节点可以分为很多种角色&#xff0c;并且一个节点可以扮演多种角色&#xff0c;下面列举几种主要的&…

【软件测试】白盒测试(知识点 + 习题 + 答案)

《 软件测试基础持续更新中》 最近大家总是催更……&#xff0c;我也是百忙之中给大家详细总结了白盒测试的重点内容&#xff01; 知识点题型答案&#xff0c;让你用最短的时间&#xff0c;学到最高效的知识&#xff01; 整理不易&#xff0c;求个三连 ₍ᐢ..ᐢ₎ ♡ 目录 一、…

Spring专题一:源码编译

下载源码 因为公司使用的是Spring5.2.x所以就下载了这个版本&#xff0c;github源码地址如下&#xff1a; GitHub - spring-projects/spring-framework at v5.2.6.RELEASE&#xff1a; 如果网络不稳定可以使用下载压缩版即可&#xff0c;网络稳定的话还是建议使用git clone …

【redis】redis RDB

1、概述 1.1定义 RDB (Redis Database) 是 Redis 的默认持久化机制&#xff0c;它能够在指定的时间间隔内将内存中的数据集快照写入磁盘。RDB 持久化产生的文件是一个经过压缩的二进制文件&#xff0c;通过该文件可以还原生成 RDB 文件时的数据库状态。 1.2特点 一次性全量备…

【工具分享】SQLmap

文章目录 工具介绍安装方式环境准备安装 sqlmap 工具介绍 sqlmap 是一个非常强大的自动化 SQL 注入工具&#xff0c;主要用于渗透测试和安全审计。它能够检测和利用 SQL 注入漏洞&#xff0c;进而访问数据库服务器。 GitHub&#xff1a;https://github.com/sqlmapproject/sql…

Everything 一款功能强大的搜索工具

要在电脑上使用Everything搜索文件&#xff0c;您需要使用以下步骤&#xff1a; 在您的电脑上下载并安装Everything软件。您可以从官方网站https://www.voidtools.com/downloads/下载最新版本的软件。 安装完成后&#xff0c;打开Everything软件。 在搜索栏中输入您要查找的文…

JsonCpp:更简洁的序列化及反序列化

简介 jsoncpp 提供了一组简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得更加方便和高效。 安装 linux环境下安装jsoncpp sudo apt-get update sudo apt-get install --reinstall libjsoncpp-dev建立软链接确保编译器找到头文件 #include <json/json.h>…

Java数据结构6-栈与队列

1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则 压栈…