题目

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容斥定理的更多相关文章

  1. “浪潮杯”第九届山东省ACM大学生程序设计竞赛重现赛 C-Cities

    题目描述:There are n cities in Byteland, and the ith city has a value ai. The cost of building a bidirec ...

  2. “浪潮杯”第九届山东省ACM大学生程序设计竞赛(重现赛)E.sequence(树状数组求逆序对(划掉))

    传送门 E.sequence •题意 定义序列 p 中的 "good",只要 i 之前存在 pj < pi,那么,pi就是 "good": 求删除一个数, ...

  3. 第八届山东省ACM大学生程序设计竞赛个人总结

    因为省赛,从开学紧张到5月7号.心思也几乎全放在ACM的训练上.因为我还是校台球协会的会长,所以台协还有一些事情需要忙,但是我都给延迟了.老会长一直在催我办校赛,但我一直说 等等吧,因为校赛只能在周六 ...

  4. 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 ...

  5. 山东省第四届ACM大学生程序设计竞赛解题报告(部分)

    2013年"浪潮杯"山东省第四届ACM大学生程序设计竞赛排名:http://acm.upc.edu.cn/ranklist/ 一.第J题坑爹大水题,模拟一下就行了 J:Contes ...

  6. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !

    n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...

  7. [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number

    Mine Number 题目:http://acm.sdut.edu.cn/sdutoj/problem.php? action=showproblem&problemid=2410 Time ...

  8. Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...

  9. 2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server

    点击打开链接 2226: Contest Print Server Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 53  Solved: 18 [Su ...

随机推荐

  1. C++设计模式 - 备忘录模式(Memento)

    状态变化模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?"状态变化"模式为这一问题提供了一种解决方案. 典型模式 Sta ...

  2. rsync同步文件到远程机器,卡住10多秒--问题解决过程

    背景 以前大体介绍过,我们这边是做运维平台的.如果要形象化理解,那么,比如jenkins这种喜闻乐见的软件大致了解吧,jenkins就经常需要同步文件/版本包到远程机器上,jenkins怎么实现的,没 ...

  3. Linux-Centos7学习笔记

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 下载.安装与配置 下载 下载Centos镜像,网站见参考 点击大的版本,例如7,再选择isos进行下载 安装 这里使用的VMware 12 Pro, ...

  4. 写fstable

    mountpoint 就是挂载点./. /usr. swap 都是系统安装时分区的默认挂载点. 如果你要挂载一个新设备,你就要好好想想了,因为这个新设备将作为文件系统永久的一部分,需要根据FSSTND ...

  5. 细说MVC框架的几大困惑:

    --千万不要为了学习框架而学习框架,而是要为了解决问题而学习框架,这才是一个程序员的正确学习之道. --框架是为了解决一个又一个在Web开发中所遇到的问题而诞生的.不同的框架,都是为了解决不同的问题, ...

  6. 线程的 sleep()方法和 yield()方法有什么区别?

    ① sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会:yield()方法只会给相同优先级或更高优先级的线程以运行的机会: ② 线程执行 sleep()方法后 ...

  7. spring-boot-learning-MongoDB

    NoSQL可以极大提高互联网系统的性能,但是它有一些致命的缺陷,其中最为严重的就是计算功能卡分有限,例如,在一个10 万数据量的List 中,我只需要满足特定条件的元素在Red is 中,使用集合或者 ...

  8. JPA、JTA、XA相关索引

    JPA和分布式事务简介:https://www.cnblogs.com/onlywujun/p/4784233.html JPA.JTA与JMS区别:https://www.cnblogs.com/y ...

  9. Redis 是单进程单线程的?

    Redis 是单进程单线程的,redis 利用队列技术将并发访问变为串行访问,消 除了传统数据库串行控制的开销.

  10. jmeter的安装使用

    以前没自己做过压力测试,一直都是测试在做.现在需要自己做压力测试了,特别学习下jmeter的使用方法.现在做下记录: 1.下载jmeter,这个忽略,百度到处都是 2.打开jmeter,jmeter的 ...