其他分享
首页 > 其他分享> > 排位赛(三)| F题

排位赛(三)| F题

作者:互联网

【题目描述】

  给定一个 n * m 的矩阵,求其中有多少个本质不同的正方形;(本质不同:不完全重合)

【输入格式】

  第一行一个数据 t(1 <= t <= 100),表示数据组数;

  接下来 t 行,每行两个数据表示 n、m(1 <= n, m <= 1e5);

【输出格式】

  每行一个数据表示本质不同的正方形的个数;

【解题思路】

  (1)由样例以及其他示例找规律,代码照抄公式即可;

  (2)样例分析:

 

1 * 1 :1 个

   
   

2 * 2 :6 个

【不要忘记边长为1.414的那个】

  (3)规律分析://规律不是这么分析的!!!!!

    边长为1:n * m;

    边长为2:(n - 1)* (m - 1);

    边长为3:(n - 2)* (m - 2);

    ......

    边长为 min(m, n) - 1: ......

    边长为 min(m, n):  max(m, n) -  min(m, n);

    边长为 21/2 : (m - 2) * (n - 2)

    边长为2 * 21/2: (m - 4) * (n - 4)

    .....

    边长为min(m, n) / 2 * 21/2: (m - min(m, n) /  2 * 2 ) * ( n - min(m, n) / 2 * 2)

【正确代码】

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef long long ll;
 6 
 7 int main()
 8 {
 9     int t;
10     scanf("%d", &t);
11     
12     while(t --)
13     {
14         int n, m;
15         ll sum = 0;
16         scanf("%d%d", &n, &m);
17         
18         for(int i = 1; i <= min(n, m); i ++) sum += (ll)i * (n - i + 1) * (m - i + 1);
19         printf("%lld\n", sum);
20     }
21     
22     return 0;
23 }

 

 

    

标签:21,min,int,排位赛,ll,long,边长
来源: https://www.cnblogs.com/bxhbxh/p/14994462.html