题意:给定 l1,r1,l2,r2,l3,r3,l4,r4l1, r1, l2, r2, l3, r3, l4, r4l1,r1,l2,r2,l3,r3,l4,r4,试求满足 li≤xi≤ril_i ≤ x_i ≤ r_ili​≤xi​≤ri​ 且 x1≠x2,x2≠x3,x3≠x4,x4≠x1x1 \ne x2, x2 \ne x3, x3 \ne x4, x4 \ne x1x1̸​=x2,x2̸​=x3,x3̸​=x4,x4̸​=x1
的四元组 (x1,x2,x3,x4)(x1, x2, x3, x4)(x1,x2,x3,x4) 的数量对 109+710^9 + 7109+7 取模的结果。

很容易看出是容斥原理,可是该怎么容斥呢?考场上没想出来,我还是太弱了。

定义sumi=ri−li+1sum_i=r_i-l_i+1sumi​=ri​−li​+1,即为每个区间的长度。首先,对于没有限制的情况,根据乘法原理,显然有ans=∏i=14sumians=\prod_{i=1}^4sum_ians=∏i=14​sumi​种四元组。

容斥原理奇加偶减,即若为奇数个数相同的就让ansansans加,否则减。

比如像112311231123这样有两个相同的情况,因为是偶数个数相同,所以要让ans减,我们找第一个区间和第二个区间的交集,ansansans就应该减去这个交集的长度∗sum3和sum4*sum_3和sum_4∗sum3​和sum4​。同样对于第二第三个区间的交,第三第四个区间的交,第四第一个区间的交也做同样的操作,对于其他的也如此。

我们发现有特殊情况,像1122,12211122,12211122,1221这样两种情况,在之前的一步被减去了两次,对于类似112211221122的这种情况,我们要让ansansans加上第一第二个区间交的长度∗*∗第三第四个区间交的长度。特殊情况特殊考虑,所以即使相同的数为偶数,也是要让ansansans加。对于类似122112211221的这种情况也类似。

对于111111111111这样的情况,我们发现它在特殊情况中被加了2次,所以应该减去三倍的区间交的长度。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
ll l[5],r[5];
ll T,sum[5];
int main()
{cin>>T;while(T--){for(int i=1;i<=4;++i)scanf("%lld%lld",&l[i],&r[i]);for(int i=1;i<=4;++i)sum[i]=r[i]-l[i]+1;ll ans=(sum[1]%mod*sum[2]%mod*sum[3]%mod*sum[4]%mod)%mod;ll L=max(l[1],l[2]);//例如1123 ll R=min(r[1],r[2]);if(R-L>=0)ans=(ans%mod-(R-L+1)*sum[3]%mod*sum[4]%mod+mod)%mod;L=max(l[2],l[3]);R=min(r[2],r[3]);if(R-L>=0)ans=(ans%mod-(R-L+1)*sum[1]%mod*sum[4]%mod+mod)%mod;L=max(l[3],l[4]);R=min(r[3],r[4]);if(R-L>=0)ans=(ans%mod-(R-L+1)*sum[1]%mod*sum[2]%mod+mod)%mod;L=max(l[4],l[1]);R=min(r[4],r[1]);if(R-L>=0)ans=(ans%mod-(R-L+1)*sum[2]%mod*sum[3]%mod+mod)%mod;ll L1=max(l[1],l[2]);//例如1122 ll R1=min(r[1],r[2]);ll L2=max(l[3],l[4]);ll R2=min(r[3],r[4]);if((R1-L1>=0)&&(R2-L2>=0))ans=(ans%mod+(R1-L1+1)%mod*(R2-L2+1)%mod+mod)%mod;L1=max(l[2],l[3]);R1=min(r[2],r[3]);L2=max(l[1],l[4]);R2=min(r[1],r[4]);if((R1-L1>=0)&&(R2-L2>=0))ans=(ans%mod+(R1-L1+1)%mod*(R2-L2+1)%mod+mod)%mod;              L=max(max(l[1],l[2]),l[3]);//例如1112 R=min(min(r[1],r[2]),r[3]);if(R-L>=0)ans=(ans%mod+(R-L+1)*sum[4]%mod+mod)%mod;L=max(max(l[2],l[3]),l[4]);R=min(min(r[2],r[3]),r[4]);if(R-L>=0)ans=(ans%mod+(R-L+1)*sum[1]%mod+mod)%mod;L=max(max(l[3],l[4]),l[1]);R=min(min(r[3],r[4]),r[1]);if(R-L>=0)ans=(ans%mod+(R-L+1)*sum[2]%mod+mod)%mod;L=max(max(l[4],l[1]),l[2]);R=min(min(r[4],r[1]),r[2]);if(R-L>=0)ans=(ans%mod+(R-L+1)*sum[3]%mod+mod)%mod;L=max(max(l[1],l[2]),max(l[3],l[4]));//例如1111 R=min(min(r[1],r[2]),min(r[3],r[4]));if(R-L>=0)ans=(ans%mod-3*(R-L+1)%mod+mod)%mod;printf("%lld\n",(ans+mod)%mod);}return 0;
}

yts1999 T2 容斥原理相关推荐

  1. 高等组合学笔记(十五):容斥原理,错排问题

    容斥原理 可以证明带有交错项的恒等式. 设SSS为一个有限集, Pi(1≤i≤m)P_i(1\le i\le m)Pi​(1≤i≤m)为mmm个性质, Ai={x∣x∈S,x具有性质Pi}A_i=\{ ...

  2. 拼多多2021校招2020.9.1笔试题 T2 and T4

    T1简单没套路,T3 a不完..所以只有T2和T4 import java.util.HashSet; import java.util.LinkedList; import java.util.Qu ...

  3. HDU 4135 Co-prime(容斥原理)

    Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...

  4. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

  5. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3028  Solved: 1460 [Submit][S ...

  6. bzoj 4710 [Jsoi2011]分特产 组合数学+容斥原理

    题面 题目传送门 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有\(x\)个物品,\(n\)个人,可以有人没有被分到,那么分给这\(n\)个人的方案数 ...

  7. 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索

    题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...

  8. hdu 4366 Card Collector (容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 . 求 ...

  9. LightOJ 1095 Arrange the Numbers(容斥原理)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题意:给出数字n,m,K(0<K<=m<=n).在n个 ...

最新文章

  1. 大数据分析常用去重算法分析『HyperLogLog 篇』
  2. 青龙羊毛——梅川衣服俩小孩(搬)
  3. Visual Studio查找搜索类和方法的快捷方法
  4. TensorFlow Serving + Docker + Tornado机器学习模型生产级快速部署
  5. 《智能家居》培训第五天------2019-01-09
  6. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...
  7. lintcode 中等题:Single number III 落单的数III
  8. C语言强化——学生管理系统
  9. 计算机科学与技术 net,计算机科学与技术
  10. 为什么薄膜干涉的厚度要很小_薄膜干涉的膜为什么不能太厚?
  11. 服务器电源维修哪里便宜,服务器电源维修
  12. Graham-Scan小总结——toj2317 Wall
  13. python 求解给定字符串中的最长DNA序列长度
  14. CKS学习笔记-Sysdig
  15. 微信朋友圈服务器缓存,怎么删微信朋友圈缓存?
  16. MT7628KN/MT7628AN处理器区别解析,参数对比
  17. xcopy 跳过已经存在的_南京的野猪已经会逛奶茶店了?!
  18. android监听系统来电并弹出提示窗口,Android 监听来去电 弹出悬浮窗提示
  19. SECS/GEM/GEM300/EAP 讲解(三)半导体协议
  20. PHP修改图片上的文字,ps图片中怎么更改文字

热门文章

  1. Android 8.0 华为手机 桌面应用图标显示圆形适配方案
  2. cocos2d-LUA逆向之用idaPro调试so库获取xxtea解密key
  3. 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...
  4. Java for语句详解
  5. 05_02_拉钩教育课程管理系统项目前后端接口联调
  6. Go实现随机、轮训、权重、哈希负载均衡
  7. 高仿蓝奏云盘下载页面源码
  8. Oracle表空间及表分区
  9. 当网站不允许上传asp cer cdx htr文件时的一个解决方法!
  10. 程序员兼职可以从什么平台接私活?