统计方格区域内正方形和长方形的个数(洛谷P1548题题解,Java语言描述)
程序员文章站
2022-07-13 13:47:03
...
题目要求
分析
这题,一看就懵,因为一看就需要推公式,很麻烦……
此时发现本题是洛谷红题哈哈哈,还没“高性能”标签,那就暴力吧!!!
注意只要区域是正方形就不是长方形(此题的长方形不包含正方形诶),就可以if…else…
计个数就好啦。
但明显可以O(1)的公式秒题,公式是啥呢,这是推理步骤(别人写的,我没推):
据此得到的C++代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int main()
{
cin>>n>>m;
int nn=min(n,m);
int z=m*n*(nn+1)+nn*(nn+1)*(2*nn+1)/6-(m+n)*nn*(nn+1)/2;
int c=n*(n+1)/2*m*(m+1)/2-z;
cout<<z<<" "<<c<<endl;
}
(反正我也没跑过这个代码)
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int y = scanner.nextInt(), x = scanner.nextInt();
scanner.close();
int square = 0, rectangle = 0;
for (int i = 0; i <= x; i++) {
for (int j = 0; j <= y; j++) {
for (int k = i+1; k <= x; k++) {
for (int l = j+1; l <= y; l++) {
if (k-i == l-j) {
square++;
} else {
rectangle++;
}
}
}
}
}
System.out.println(square + " " + rectangle);
}
}
暴力求解它不香吗