【容斥】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 ...
随机推荐
- 10本Java架构师必读书籍
1.大型网站系统与JAVA中间件实践 本书围绕大型网站和支撑大型网站架构的Java中间件的实践展开介绍. 从分布式系统的知识切入,让读者对分布式系统有基本的了解:然后介绍大型网站随着数据量.访问量增长 ...
- WPF数据爬取小工具-某宝推广位批量生成,及订单爬取 记:接单最痛一次的感悟
项目由来:上月闲来无事接到接到一个单子,自动登录 X宝平台,然后重定向到指定页面批量生成推广位信息:与此同时自动定时同步订单数据到需求提供方的Java服务. 当然期间遇到一个小小的问题就是界面样式的问 ...
- Comparison of several types of convergence
In functional analysis, several types of convergence are defined, namely, strong convergence for ele ...
- sendEmail 阿里云使用587端口
使用sendEmail使用参数 -o tls=yes -s smtp服务器+端口 因为阿里云屏蔽了25端口,我使用465也不成功,只有使用587端口,我使用的qq企业邮箱,测试可用
- Django项目和Django初体验和创建、目录结构认识
.MVC的设计方式(跟Flask一样,都是MVC的设计模式) .开发效率高 .功能强大(丰富的第三方组件) .安全性高(帮助开发者规避安全漏洞) 目前市面上使用:Django>Flask #使用 ...
- windows docker常用命令
关键词 示例 作用 attach sudo docker run -itd ubuntu:14.04 /bin/bash 进入容器 exec docker exec -it mysql bash 在容 ...
- Ubuntu18.04上安装Docker CE
建立 REPOSITORY 1.更新索引包 更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的地址,这样才能获取到最新的软件包 sudo ...
- 049 DSL语句
1.说明 2.sql程序 package com.scala.it import org.apache.spark.sql.hive.HiveContext import org.apache.spa ...
- HDFS分布式文件系统的常用命令行操作
一.HDFS的客户端种类 1.网页形式 =>用于测试 网址为你的namenode节点的ip+50070的端口号,如: 192.168.50.128:50070 2.命令行形式 =>用于测 ...
- setTimeout/setInterval,属性、连续动画、倒计时的分析
setTimeout.setInterval环境应用和使用场景 说明:setTimeout属于超时调用, setInterval 属于间隔调用 1,setTimeout超时的使用介绍: var set ...