zoukankan      html  css  js  c++  java
  • P2241 统计方形题解

    题目传递门

    解题思路:

    1、正方形

    我们以((3,2))为图形右下角端点进行解释,这时可以构成的正方形共两个,一个是边长为(1)的,另一个是条边为(2)的,没有其它的了。为什么((3,2))两个数字,一个是(3),一个是(2),结果受限于后面的(2),而无法突破呢?因为要照顾短的嘛。所以此时正方形个数=(min(x,y))个。

    2、矩形

    用笔画一下,就知道,一个长为(3),宽度为(2)的矩形,以现有右下角端点为右下角端点的子矩形个数是(3 imes 2=6)个,所以矩形个数=(x imes y)个。

    3、长方形

    (长方形个数=矩形个数-正方形个数)

    二、C++代码

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    
    /**
     母题:P1548
     一、算正方形的个数
    枚举每一个格子,看以它为左上角的矩形共有多少个(正方形与长方形同属于矩形)
    
    二、算长方形个数(矩形=长方形+正方形)
    1.其实算长方形并不常见,但算矩形大家应该经常遇到,所以如果你会算矩形,再联系第一个问题,那答案就转化为 矩形个数-正方形个数.
    2.像求解正方形个数一样,固定矩形右下角(i,j),显然此时矩形个数为i*j.
    3.同理,求和即可.然后,再减去正方形的个数就是长方形的个数啦。
    */
    LL n, m, s1, s2;
    
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) {
                s1 += min(i, j);//也可以理解为左上角
                s2 += i * j;    //也可以理解为左上角开始,也是一样的
            }
        cout << s1 << " " << s2 - s1 << endl;
        return 0;
    }
    
  • 相关阅读:
    zstu.4189: 逻辑运算(构建 && 前缀表达式入门)
    Oulipo (kmp)
    zstu.4194: 字符串匹配(kmp入门题&& 心得)
    杭赛.Triangle(数学推导)
    cf.VK CUP 2015.C.Name Quest(贪心)
    微服务技术栈
    luogu3320 寻宝游戏 (dfs序+倍增lca+set)
    cf757F Team Rocket Rises Again (dijkstra+支配树)
    cf983E NN Country (倍增+dfs序+树状数组)
    cf860E Arkady and A Nobody-men (树剖)
  • 原文地址:https://www.cnblogs.com/littlehb/p/15026387.html
Copyright © 2011-2022 走看看