题意 :给出一个初始的黑白相间的棋盘  有两个人  第一个人先用白色染一块矩形区域

第二个人再用黑色染一块矩形区域 问最后黑白格子各有多少个

思路:这题的关键在于求相交的矩形区间

给出一个矩形的左下和右上角  则相交的条件为 max(X1,X3)<=min(X2,X4)&&max(Y1,Y3)<=min(Y2,Y4)  这里可以用线和线有公共区间的条件来推 矩形就是两个线

还有就是如果相交则求 相交的矩形的 左下和右上的坐标 ll xa=max(X1,X3),ya=max(Y1,Y3),xb=min(X4,X2),yb=min(Y2,Y4);

然后就是简单的容斥正常做就行了

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
#define pb push_back
#define arr(zzz) array<ll,zzz>
using namespace std;
#define ll long long
#define int long long
const int maxn=3e5+;
const int inf=0x3f3f3f3f;
ll count(int x1,int y1,int x2,int y2,int o){//return black
ll n=x2-x1+;
ll m=y2-y1+;
ll white=,black=;
if(n&){
if(m&){
white=(n+)/+1ll*(n/+(n+)/)*(m/);
black=1ll*m*n-white;
}
else {
white=black=1ll*n*m/;
}
}
else {
white=black=1ll*n*m/;
}
if(o==){
return white;
}
else return black; }
void exchange(ll &x,ll&y){
ll tmp=x;
x=y;
y=tmp;
}
int32_t main(){
int t;
scanf("%lld",&t);
int n,m;
while(t--){
ll black=,white=;
int X1,Y1,X2,Y2,X3,Y3,X4,Y4;
scanf("%lld%lld",&n,&m);
scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&X1,&Y1,&X2,&Y2,&X3,&Y3,&X4,&Y4);
if(n&){
if(m&){
white=(n+)/+ (n/+(n+)/)*(m/);
black=1ll*m*n-white;
}
else {
white=black=1ll*n*m/;
}
}
else {
white=black=1ll*n*m/;
}
ll tmp1=count(X1,Y1,X2,Y2,(X1+Y1)%==);
white-=1ll*(X2-X1+)*(Y2-Y1+)-tmp1;
white+=1ll*(X2-X1+)*(Y2-Y1+);
black-=tmp1;
ll tmp2=count(X3,Y3,X4,Y4,(X3+Y3)%==);
white-=1ll*(X4-X3+)*(Y4-Y3+)-tmp2;
black-=tmp2;
black+=1ll*(X4-X3+)*(Y4-Y3+);
/*if(X1<=X3){
exchange(X1,X3);
exchange(X2,X4);
exchange(Y1,Y3);
exchange(Y2,Y4);
}
if(){ }*/
ll minx=min(X1,X3);
ll miny=min(Y1,Y3);
if(max(X1,X3)<=min(X2,X4)&&max(Y1,Y3)<=min(Y2,Y4)){
ll xa=max(X1,X3),ya=max(Y1,Y3),xb=min(X4,X2),yb=min(Y2,Y4);
ll tmp=count(xa,ya,xb,yb,(xa+ya)%==);
//cout<<xa<<" "<<ya<<" "<<xb<<""<<yb<<" fuck"<<tmp<<endl;
black+=tmp;
white-=1ll*(xb-xa+)*(ya-yb+);
white+=1ll*(xb-xa+)*(ya-yb+)-tmp; }
cout<<white<<" "<<black<<endl;
} return ;
}

Codeforces Round #524 (Div. 2) C. Masha and two friends 几何:判断矩形是否相交以及相交矩形坐标的更多相关文章

  1. Codeforces Round #524 (Div. 2) C. Masha and two friends(矩形相交)

    C. Masha and two friends time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. Codeforces Round #524 (Div. 2) C. Masha and two friends

    C. Masha and two friends 题目链接:https://codeforc.es/contest/1080/problem/C 题意: 给出一个黑白相间的n*m的矩阵,现在先对一个子 ...

  3. Codeforces Round #524 (Div. 2) C. Masha and two friends(思维+计算几何?)

    传送门 https://www.cnblogs.com/violet-acmer/p/10146350.html 题意: 有一块 n*m 的棋盘,初始,黑白块相间排列,且左下角为白块. 给出两个区间[ ...

  4. Codeforces Round #524 (Div. 2) C. Masha and two friends 思路

    题目:题目链接 思路:直接计数显然是不好处理的,但分情况讨论只要不写错这题是一定可以出的,但这样基本做完这个题就没时间做其他题了,但当时我就这么蠢的这样做了,比赛一个半小时的时候突然发现一个似乎可行的 ...

  5. Codeforces Round #524 (Div. 2)(前三题题解)

    这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...

  6. Codeforces Round #524 (Div. 2) Masha and two friends矩形

    题目 题意:    给一个n*m块大的黑白相间的矩形,在这个举行中操作,要先把第一个矩形(左下角坐标(x1,y2),右上角坐标(x2,y2)) 全部涂成白色,再把第二个矩形(左下角坐标(x3,y3), ...

  7. Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)

    https://codeforces.com/contest/1080/problem/F 题意 有k个区间,区间的种类有n种,有m个询问(n,m<=1e5,k<=3e5),每次询问a,b ...

  8. Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)

    https://codeforces.com/contest/1080/problem/E 题意 有一个n*m(<=250)的字符矩阵,对于每个子矩阵的每一行可以任意交换字符的顺序,使得每一行每 ...

  9. Codeforces Round #524 (Div. 2) Solution

    A. Petya and Origami Water. #include <bits/stdc++.h> using namespace std; #define ll long long ...

随机推荐

  1. JavaWeb学习(三十)———— 数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  2. #17 random&json模块

    前言 本节将讲解两个模块,一个是随机模块random,一个是字符串和字典之间的转换模块json,这两个模块使用率还是很高的,来认识一下! 一.random模块 random的官方文档:https:// ...

  3. Algolia使用教程 , 超详细傻子看都会

    框架描述 发现网上Algolia这块的资料较少,就花了点时间从官网上整理了下,总结了几项常用的功能用法. 现在比较有名的Algolia提供了云搜索的服务.具体办法是我们将数据库的信息以JSON的格式上 ...

  4. js 日期格式转换(转载)

    1.当前时间转为 “yyyy-MM-dd HH:MM:SS” function getNowFormatDate() { var date = new Date(); var seperator1 = ...

  5. canvas动画效果新年祝福话语

    html代码 <ul id="ul"></ul> css代码 * { margin:; padding:; } ul { list-style: none; ...

  6. The Minimum Cycle Mean in a Digraph 《有向图中的最小平均权值回路》 Karp

    文件链接 Karp在1977年的论文,讲述了一种\(O(nm)\)的算法,用来求有向强连通图中最小平均权值回路(具体问题请参照这里) 本人翻译(有删改): 首先任取一个节点 \(s\) ,定义 \(F ...

  7. REM在edge浏览器中不重新计算解决

    经过多分析和排查,此问题解决的方案 第一种: 在CSS样式中添加 body { font-size:100% } 如果不起作用,可以尝试将引用的REMjs放在head内引用

  8. 用animate改变了某个样式之后再用css控制会无效

    我前几天写了个移动端运动,(这个运动的代码我贴在这了:http://www.cnblogs.com/weiman/p/6600380.html)然后发现了这个问题,具体如下: 未运动前是这样的,菜单栏 ...

  9. java中多线程详解-synchronized

    一.介绍 当多个线程涉及到共享数据的时候,就会设计到线程安全的问题.非线程安全其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是“脏读”.发生脏读,就是取到的数据已经被其他的线 ...

  10. 解决如下问题:You are using pip version 8.1.1, however version 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

    问题描述: 今天想学习一下TUM数据集RGBD-Benchmark工具的使用,利用python进行相关操作时,缺少一个第三方模块,于是打算用pip进行安装,便出现如下图所示的问题. 解决办法: 执行如 ...