专栏文章

B4356 [GESP202506 二级] 数三角形

B4356题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miovkk90
此快照首次捕获于
2025/12/03 01:51
3 个月前
此快照最后确认于
2025/12/03 01:51
3 个月前
查看原文

B4356 [GESP202506 二级] 数三角形

题目重述

给定正整数 n,求直角边长 a, b 均不超过 n 的不同直角三角形的数量,要求三角形面积为整数。两个三角形相同当且仅当直角边相同(考虑顺序)。

解题思路

  1. 数学分析
    • 面积公式:S = (a×b)/2
    • 要使 S 为整数,a×b 必须是偶数
    • 即 a 和 b 中至少有一个是偶数
  2. 组合计算
    • 总对数:满足 a ≤ b ≤ n 的有序对数量为 n(n+1)/2
    • 无效对数:a 和 b 均为奇数的对数
    • 设 k = ?(n+1)/2? 为不超过 n 的奇数个数
    • 无效对数为 k(k+1)/2
  3. 最终公式
    • 有效对数 = 总对数 - 无效对数

代码实现

CPP
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 计算总对数 C(n+1,2)
    long long total = 1LL * n * (n + 1) / 2;
    
    // 计算奇数个数
    int odd_count = (n + 1) / 2;
    
    // 计算无效对数(两个都是奇数)
    long long invalid = 1LL * odd_count * (odd_count + 1) / 2;
    
    cout << total - invalid << endl;
    return 0;
}

复杂度分析

  • 时间复杂度:O(1)(直接公式计算)
  • 空间复杂度:O(1)(仅使用常数空间)
    希望管理员大大通过一下QwQ。

评论

0 条评论,欢迎与作者交流。

正在加载评论...