【容斥】Four-tuples @山东省第九届省赛 F
时间限制: 10 Sec 内存限制: 128 MB
题目描述
Given l1,r1,l2,r2,l3,r3,l4,r4, please count the number of four-tuples (x1,x2,x3,x4) such that li≤ xi≤ ri and x1≠x2,x2≠x3,x3≠x4,x4≠x1. The answer should modulo 10^9+7 before output.
输入
The input consists of several test cases. The first line gives the number of test cases, T(1≤ T≤ 10^6).
For each test case, the input contains one line with 8 integers l1,r1,l2, r2, l3,r3,l4,r4(1≤ li≤ ri≤ 10^9)
输出
For each test case, output one line containing one integer, representing the answer.
样例输入
1
1 1 2 2 3 3 4 4
样例输出
1
题意:
给你四个区间,要求每个区间选一个数组成一个四元组(x1,x2,x3,x4x1,x2,x3,x4),要求
x1≠x2,x2≠x3,x3≠x4,x4≠x1x1≠x2,x2≠x3,x3≠x4,x4≠x1
solution
1.先将四个区间长度的乘积作为答案
2.分别减去 x1=x2,x2=x3,x3=x4,x4=x1x1=x2,x2=x3,x3=x4,x4=x1 四种情况的组合数量(每种情况中未提及的变量在其区间中任选,即统计答案时直接乘区间长度)
3.因为减去 x1=x2x1=x2 和 x2=x3x2=x3 时会重复减去 x1=x2=x3x1=x2=x3 的情况,所以要加回来
类似的还有 x1=x2=x4,x1=x2=x4, x2=x3=x4,x2=x3=x4, x1=x3=x4,x1=x3=x4, x1=x2且x3=x4,x1=x2且x3=x4, x2=x3且x1=x4x2=x3且x1=x4
4.第一步的答案中应该减去1个x1=x2=x3=x4x1=x2=x3=x4,但是在第二步中减去了4个,第三步中又加了6个,所以总共加了2个,最终应该减去3个x1=x2=x3=x4x1=x2=x3=x4 的情况
#define IN_LB() freopen("C:\\Users\\acm2018\\Desktop\\in.txt","r",stdin)
#define OUT_LB() freopen("C:\\Users\\acm2018\\Desktop\\out.txt","w",stdout)
#define IN_PC() freopen("C:\\Users\\hz\\Desktop\\in.txt","r",stdin)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
const ll MOD = 1e9+7;
int main() {
// IN_LB();
scanf("%d",&T);
while(T--) {
ll l1,r1,l2,r2,l3,r3,l4,r4;
ll maxl_1,minr_1,maxl_2,minr_2;
scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&l3,&r3,&l4,&r4);
ll ans = (r1-l1+1)*(r2-l2+1)%MOD;
ans = ans*(r3-l3+1)%MOD;
ans = ans*(r4-l4+1)%MOD;
//1==2
maxl_1 = max(l1,l2);
minr_1 = min(r1,r2);
if(maxl_1<=minr_1) {
ans = ((ans-(minr_1-maxl_1+1)*(r3-l3+1)%MOD*(r4-l4+1)%MOD)%MOD+MOD)%MOD;
}
//2==3
maxl_1 = max(l2,l3);
minr_1 = min(r2,r3);
if(maxl_1<=minr_1) {
ans = ((ans-(minr_1-maxl_1+1)*(r4-l4+1)%MOD*(r1-l1+1)%MOD)%MOD+MOD)%MOD;
}
//3==4
maxl_1 = max(l3,l4);
minr_1 = min(r3,r4);
if(maxl_1<=minr_1) {
ans = ((ans-(minr_1-maxl_1+1)*(r1-l1+1)%MOD*(r2-l2+1)%MOD)%MOD+MOD)%MOD;
}
//1==4
maxl_1 = max(l1,l4);
minr_1 = min(r1,r4);
if(maxl_1<=minr_1) {
ans = ((ans-(minr_1-maxl_1+1)*(r2-l2+1)%MOD*(r3-l3+1)%MOD)%MOD+MOD)%MOD;
}
//1==2&&2==3
maxl_1 = max(l1,max(l2,l3));
minr_1 = min(r1,min(r2,r3));
if(maxl_1<=minr_1) {
ans = (ans+(minr_1-maxl_1+1)*(r4-l4+1)%MOD)%MOD;
}
//1==2&&1==4
maxl_1 = max(l1,max(l2,l4));
minr_1 = min(r1,min(r2,r4));
if(maxl_1<=minr_1) {
ans = (ans+(minr_1-maxl_1+1)*(r3-l3+1)%MOD)%MOD;
}
//1==2&&3==4
maxl_1 = max(l1,l2);
minr_1 = min(r1,r2);
maxl_2 = max(l3,l4);
minr_2 = min(r3,r4);
if(minr_1>=maxl_1&&minr_2>=maxl_2){
ans = (ans+(minr_1-maxl_1+1)*(minr_2-maxl_2+1)%MOD)%MOD;
}
//2==3&&3==4
maxl_1 = max(l2,max(l3,l4));
minr_1 = min(r2,min(r3,r4));
if(maxl_1<=minr_1) {
ans = (ans+(minr_1-maxl_1+1)*(r1-l1+1)%MOD)%MOD;
}
//2==3&&1==4
maxl_1 = max(l3,l2);
minr_1 = min(r3,r2);
maxl_2 = max(l1,l4);
minr_2 = min(r1,r4);
if(minr_1>=maxl_1&&minr_2>=maxl_2){
ans = (ans+(minr_1-maxl_1+1)*(minr_2-maxl_2+1)%MOD)%MOD;
}
//3==4&&1==4
maxl_1 = max(l1,max(l3,l4));
minr_1 = min(r1,min(r3,r4));
if(maxl_1<=minr_1) {
ans = (ans+(minr_1-maxl_1+1)*(r2-l2+1)%MOD)%MOD;
}
//1==2&&2==3&&3==4
maxl_1 = max(max(l1,l2),max(l3,l4));
minr_1 = min(min(r1,r2),min(r3,r4));
if(maxl_1<=minr_1){
ans = ((ans-(minr_1-maxl_1+1)*3)%MOD+MOD)%MOD;
}
printf("%lld\n",ans);
}
return 0;
}
【容斥】Four-tuples @山东省第九届省赛 F的更多相关文章
- 【二分图最大匹配】Bullet @山东省第九届省赛 B
时间限制: 6 Sec 内存限制: 128 MB 题目描述 In GGO, a world dominated by gun and steel, players are fighting for t ...
- 【二分图带权匹配】Anagram @山东省第九届省赛 A
题目描述 Orz has two strings of the same length: A and B. Now she wants to transform A into an anagram o ...
- nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速
宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...
- NYOJ 1272 表达式求值 第九届省赛 (字符串处理)
title: 表达式求值 第九届省赛 nyoj 1272 tags: [栈,数据结构] 题目链接 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表 ...
- 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...
- 第七届河南省赛F.Turing equation(模拟)
10399: F.Turing equation Time Limit: 1 Sec Memory Limit: 128 MB Submit: 151 Solved: 84 [Submit][St ...
- SD第九届省赛B题 Bullet
Bullet Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description In G ...
- ZOJ 3606 Lazy Salesgirl 浙江省第九届省赛
Lazy Salesgirl Time Limit: 5 Seconds Memory Limit: 65536 KB Kochiya Sanae is a lazy girl who ma ...
- ZOJ 3601 Unrequited Love 浙江省第九届省赛
Unrequited Love Time Limit: 16 Seconds Memory Limit: 131072 KB There are n single boys and m si ...
随机推荐
- java运算符-逻辑、三元运算符
1.逻辑运算符 逻辑运算符,它是用于布尔值进行运算的,运算的最终结果为布尔值true或false. 运算符 运算规则 范例 结果 & 与 false&true False | 或 fa ...
- 【BZOJ2402】陶陶的难题II 分数规划+树链剖分+线段树+凸包
题解: 首先分数规划是很明显的 然后在于我们如何要快速要求yi-mid*xi的最值 这个是看了题解之后才知道的 这个是斜率的一个基本方法 我们设y=mid*x+z 那么显然我们可以把(x,y)插入到一 ...
- sparkStreaming消费kafka-0.8方式:direct方式(存储offset到zookeeper)
生产中,为了保证kafka的offset的安全性,并且防止丢失数据现象,会手动维护偏移量(offset) 版本:kafka:0.8 其中需要注意的点: 1:获取zookeeper记录的分区偏移量 2: ...
- Codeforces 886E Maximum Element 组合数学 + dp
我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数. 我们能得到dp方程 dp[ i ] = sum(dp[ i - j - ...
- gitlab之五: gitlab之webhook
webhook(网络钩子),一般与jenkins联合使用,gitlab的某个项目的代码更新了后就触发 webhook中配置的 url ,这个url一般是某一个jienkins中某一个job的url.即 ...
- UOJ#219/BZOJ4650 [NOI2016]优秀的拆分 字符串 SA ST表
原文链接http://www.cnblogs.com/zhouzhendong/p/9025092.html 题目传送门 - UOJ#219 (推荐,题面清晰) 题目传送门 - BZOJ4650 题意 ...
- BZOJ1433 [ZJOI2009]假期的宿舍 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8372785.html 题目传送门 - BZOJ1433 题解 我们理一理题目. 在校的学生,有自己的床,还可以睡 ...
- 分解数据表(将一个datatable按数据量分隔成多个table)
/// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...
- 将xml 写到内存中再已string类型读出来
System.IO.MemoryStream ms = new System.IO.MemoryStream(); xmlDoc.Save(ms); System.IO.StreamReader sr ...
- springmvc 无法访问静态资源
没有配置<mvc:resources location="/" mapping="/**"/> <?xml version="1.0 ...