【容斥】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 ...
随机推荐
- select2插件 多选框动态初始化值
转自https://blog.csdn.net/yiyiwyf/article/details/53521980 上一篇讲了select2的多选和大标题设置. 这周做到了修改的功能,需要将旧数据的选项 ...
- 【译】你应该了解的JavaScript数组方法
让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...
- Codeforces 837F Prefix Sums
Prefix Sums 在 n >= 4时候直接暴力. n <= 4的时候二分加矩阵快速幂去check #include<bits/stdc++.h> #define LL l ...
- Codeforces 639D Bear and Contribution
Bear and Contribution 对于对于5余数为, 0, 1, 2, 3, 4的分别处理一次, 用优先队列贪心. #include<bits/stdc++.h> #define ...
- Python 经典类和新式类
#!/usr/bin/env python# -*- coding:utf-8 -*-# 作者:Presley# 邮箱:1209989516@qq.com# 时间:2018-10-21# 新式类和经典 ...
- BZOJ2534 Uva10829L-gap字符串 字符串 SA ST表
原文链接https://www.cnblogs.com/zhouzhendong/p/9240665.html 题目传送门 - BZOJ2534 题意 有一种形如 $uvu$ 形式的字符串,其中 $u ...
- springmvc+ajax——第三讲(post请求)
在ajax01.html中增加个input标签: 在ajax的js中增加: 在controller中仍然使用getParamter():
- springmvc 无法访问静态资源
没有配置<mvc:resources location="/" mapping="/**"/> <?xml version="1.0 ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- 如何让自己的Dev C++用上C++11,c++14标准
首先确保Dev C++版本是最新的5.11版 其实用C++11和C++14标准的语法去运行还是会出现结果的,最多warning一下 但完美主义者是不允许这样的 我们可以点击菜单栏的“工具”-> ...