“浪潮杯”第九届山东省ACM大学生程序设计竞赛 F: Four-tuples容斥定理
题目
F : Four-tuples

输入
1
1 1 2 2 3 3 4 4
输出
1
题意
给l1, r1, l2, r2, l3, r3, l4, r4 , 八个数据, 要求输出在区间[l1, r1] , [l2, r2] , [l3, r3] , [l4, r4]
(记为A, B, C, D
)范围内, 各取一个数(取作x1, x2, x3, x4), 并且x1 != x2, x2 != x3, x3 != x4, x4 != x1,
注意像x1 == x3是可以的
思路
容斥原理
结果 = 每个区间值的个数相乘 - 四种相等的情况即x1=x2, x2=x3...... (前者好说, 关键是后面这部分)
四种相等的情况计算方法:(ABCD代表四个区间里的任意一个数)

AC代码
#include <bits/stdc++.h>
#include <algorithm> using namespace std; const int mod = 1e9 + 7; typedef long long ll; ll query2(ll l1, ll r1, ll l2, ll r2)//query求的是几个区间重复的数的个数, 以下也是
{
ll l = max(l1, l2), r = min(r1, r2);
return r-l+1>0? r-l+1 : 0;
}
ll query3(ll l1, ll r1, ll l2, ll r2, ll l3, ll r3)
{
ll l = max(l1, max(l2, l3)), r = min(r1, min(r2, r3));
return r-l+1>0? r-l+1 : 0;
}
ll query4(ll l1, ll r1, ll l2, ll r2, ll l3, ll r3, ll l4, ll r4)
{
ll l = max(max(l3, l4), max(l1, l2)), r = min(min(r3, r4), min(r1, r2));
return r-l+1>0? r-l+1 : 0;
} int main()
{
int t;
ll l1, l2, l3, l4, r1, r2, r3, r4;
cin >> t;
while( t --)
{
scanf("%lld%lld%lld%lld%lld%lld%lld%lld", &l1,&r1,&l2,&r2,&l3,&r3,&l4,&r4); ll len1 = r1 - l1 + 1;
ll len2 = r2 - l2 + 1;
ll len3 = r3 - l3 + 1;
ll len4 = r4 - l4 + 1; ll sum = len1 * len2 % mod;
sum = sum * len3 % mod;
sum = sum * len4 % mod; ll ant = 0;
ant = (ant + query2(l1, r1, l2, r2) % mod * len3 % mod * len4 % mod) % mod;
ant = (ant + query2(l2, r2, l3, r3) % mod * len1 % mod * len4 % mod) % mod;
ant = (ant + query2(l4, r4, l3, r3) % mod * len1 % mod * len2 % mod) % mod;
ant = (ant + query2(l4, r4, l1, r1) % mod * len2 % mod * len3 % mod) % mod;
// 第一步完成--------------------------------------------------------- ant = (ant - query3(l1, r1, l2, r2, l3, r3) % mod * len4 % mod + mod) % mod;
ant = (ant - query3(l1, r1, l2, r2, l4, r4) % mod * len3 % mod + mod) % mod;
ant = (ant - query3(l4, r4, l2, r2, l3, r3) % mod * len1 % mod + mod) % mod;
ant = (ant - query3(l1, r1, l4, r4, l3, r3) % mod * len2 % mod + mod) % mod;
// 第二步完成--------------------------------------------------------- ant = (ant - query2(l1, r1, l2, r2) % mod * query2(l4, r4, l3, r3) % mod + mod) % mod;
ant = (ant - query2(l2, r2, l3, r3) % mod * query2(l4, r4, l1, r1) % mod + mod) % mod;
// 第三步完成--------------------------------------------------------- ant = (ant + 3 * query4(l1, r1, l2, r2, l3, r3, l4, r4) % mod + mod) % mod;
// 第四步完成--------------------------------------------------------- cout << (sum - ant + mod) % mod << endl;
} return 0;
}
“浪潮杯”第九届山东省ACM大学生程序设计竞赛 F: Four-tuples容斥定理的更多相关文章
- “浪潮杯”第九届山东省ACM大学生程序设计竞赛重现赛 C-Cities
题目描述:There are n cities in Byteland, and the ith city has a value ai. The cost of building a bidirec ...
- “浪潮杯”第九届山东省ACM大学生程序设计竞赛(重现赛)E.sequence(树状数组求逆序对(划掉))
传送门 E.sequence •题意 定义序列 p 中的 "good",只要 i 之前存在 pj < pi,那么,pi就是 "good": 求删除一个数, ...
- 第八届山东省ACM大学生程序设计竞赛个人总结
因为省赛,从开学紧张到5月7号.心思也几乎全放在ACM的训练上.因为我还是校台球协会的会长,所以台协还有一些事情需要忙,但是我都给延迟了.老会长一直在催我办校赛,但我一直说 等等吧,因为校赛只能在周六 ...
- 2014年山东省第五届ACM大学生程序设计竞赛F题:Full Binary Tree
题目描述 In computer science, a binary tree is a tree data structure in which each node has at most two ...
- 山东省第四届ACM大学生程序设计竞赛解题报告(部分)
2013年"浪潮杯"山东省第四届ACM大学生程序设计竞赛排名:http://acm.upc.edu.cn/ranklist/ 一.第J题坑爹大水题,模拟一下就行了 J:Contes ...
- [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !
n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...
- [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
Mine Number 题目:http://acm.sdut.edu.cn/sdutoj/problem.php? action=showproblem&problemid=2410 Time ...
- Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...
- 2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server
点击打开链接 2226: Contest Print Server Time Limit: 1 Sec Memory Limit: 128 MB Submit: 53 Solved: 18 [Su ...
随机推荐
- (leetcode)二叉树的前序遍历-c语言实现
给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 前序遍历 前序遍历首先 ...
- metinfo 6.0 任意文件读取漏洞
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.点击新建项目按钮,弹出对画框中选择(C:\ ...
- 学习SpringMVC必知必会(7)~springmvc的数据校验、表单标签、文件上传和下载
输入校验是 Web 开发任务之一,在 SpringMVC 中有两种方式可以实现,分别是使用 Spring 自带的验证 框架和使用 JSR 303 实现, 也称之为 spring-validator 和 ...
- Redis快速入门:初识Redis
[IT168 专稿]在之前的文章中介绍了<Redis快速入门:选择Key-Value Store>,今天给大家介绍Redis的入门知识.Redis是一个开源的使用ANSI C语言编写.支持 ...
- Android中的Coroutine协程原理详解
前言 协程是一个并发方案.也是一种思想. 传统意义上的协程是单线程的,面对io密集型任务他的内存消耗更少,进而效率高.但是面对计算密集型的任务不如多线程并行运算效率高. 不同的语言对于协程都有不同的实 ...
- SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
异常内容: Caused by: java.lang.IllegalStateException: In the composition of all global method configurat ...
- SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码
一.yml文件配置 spring: # 数据库配置 datasource: primary: jdbc-url: jdbc:mysql://localhost:3306/mes-dev?useUnic ...
- vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作
官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...
- java支持多继承吗
java不支持多继承,只支持单继承(即一个类只能有一个父类).但是java接口支持多继承,即一个子接口可以有多个父接口.(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个 ...
- 动态规划 洛谷P1048 [NOIP2005 普及组] 采药
洛谷P1048 [NOIP2005 普及组] 采药 洛谷的一个谱架-的题目,考的是01背包问题,接下来分享一下我的题解代码. AC通过图: 我的代码: 1 //动态规划 洛谷P1048 [NOIP20 ...