题目链接:https://vjudge.net/problem/TopCoder-14286

知识点:  组合数学、容斥原理

题目大意:

  给出 \(A,B,C\),问有多少个有序三元组 \((a,b,c)\),满足 \(a \le A,b \le B,c \le C\),并且长度为 \(a,b,c\) 的三条边能构成三角形。输出答案数模 \(1000000007\) 后的值。
  \(A,B,C \le 10^9\).
 
解题思路:
  答案等于 \(A \times B \times C\) 减去不能构成三角形的方案数。有三种不能构成三角形的对称的情况:
  \(a+b \le c, a+c \le b, b+c \le a\).
  现在先求解 \(a+b \le c\) 的情况,其他两种情况做类似处理即可。已知 \(c \le C\)。可以将 \(a +b \le c\) 表达成 \(a+b+x=c, 0 \le x\),将 \(c \le C\) 表达成 \(c+y=C, 0 \le y\)。则我们可以列出下式:
  \(a+b+x+y=C, 1 \le a,b, 0 \le x,y\)
  上式的解的个数即为满足 \(a+b \le c\) 的方案数,等价于将 \(C\) 分成 \(4\) 份(允许其中有两份为 \(0\))的方案数再利用容斥原理减去 \(a>A, b>B\) 的部分,具体的式子是
  \(C_{C+1}^{3}-C_{C-A+1}^{3}-C_{C-B+1}^{3}+C_{C-A-B+1}^{3}\).
 
AC代码:

 #include <cstdio>

 using namespace std;
typedef long long LL;
const LL mod=1e9+; class TriangleTriples{
public:
LL c3(LL a){
if(a<) return ;
return a*(a-)%mod*(a-)%mod*%mod;
}
LL solve(LL a,LL b,LL c){
return (c3(a+)-c3(a-b+)-c3(a-c+)+c3(a-b-c+)+mod)%mod;
} int count(int A, int B, int C){
LL a=A,b=B,c=C;
LL ans=a*b%mod*c%mod;
ans=(ans-solve(a,b,c)-solve(b,a,c)-solve(c,a,b))%mod;
ans+=mod;
ans%=mod;
return (int)ans;
}
};
  

TCO14286 TriangleTriples的更多相关文章

随机推荐

  1. C++操作Kafka使用Protobuf进行跨语言数据交互

    C++操作Kafka使用Protobuf进行跨语言数据交互 Kafka 是一种分布式的,基于发布 / 订阅的消息系统.主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T ...

  2. 【Linux题目】第六关

    [定时任务规则] 1. 如果在某用户的crontab文件中有以下记录,该行中的命令多久执行一次(RHCE考试题)?( ) 30 4 * * 3 mycmd A. 每小时. B. 每周. C. 每年三月 ...

  3. JavaScript Array every()&some()&reduce()方法

    every()方法测试数组的所有元素是否都通过了指定函数的测试. // 每一项都要满足条件才会返回true,只要有一项不满足返回false var arr = [1, 2, 3, 4]; let bl ...

  4. Java_Web--JDBC 增加记录操作模板

    如果不能成功链接数据库,我的博客JAVA中有详细的介绍,可以看一下 import java.sql.Connection; import java.sql.DriverManager; import ...

  5. JSP、ASP、PHP Web应用程序怎么这么多P!

    之前我们说完了计算机网络应用程序的两种结构:C/S,B/S(传送门)今天我们详细说一说B/S开发中的这么多P是干什么的. 1.什么是Web应用程序 一个Web应用程序是由完成特定任务的各种Web组件( ...

  6. POJ 2955 区间DP必看的括号匹配问题,经典例题

    Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14226 Accepted: 7476 Description ...

  7. LeetCode 56,区间合并问题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第33篇文章,我们一起来看LeetCode的第56题,它的难度是Medium. 题意 这道题的题意也很简单,只有 ...

  8. Android 讯飞语音听写SDK快速接入(附空指针解决和修改对话框文字方法)

    1.账号准备工作 首先要有一个讯飞的账号啦,为后面申请APPID.APPKey等东西做准备.顺带一提:讯飞对不同认证类型用户开 放的SDK的使用次数是有不同的,详情如下图. 账号申请完成后,需要去你自 ...

  9. centos7 源码安装nginx

    1. 安装编译所需要的工具包 yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 2. 安装ngi ...

  10. 2020 wannafly camp 补题 day1

    题目可以从牛客上找到. 最简单的一个题应该是B B. 密码学 这个应该就是倒着推,题目给了你加密的顺序,所以我们逆推这个就可以得到每一次加密前的字符串. 1H. 最大公约数 题目大意就是给你一个范围1 ...