Codeforces Round #524 (Div. 2) C. Masha and two friends 几何:判断矩形是否相交以及相交矩形坐标
题意 :给出一个初始的黑白相间的棋盘 有两个人 第一个人先用白色染一块矩形区域
第二个人再用黑色染一块矩形区域 问最后黑白格子各有多少个
思路:这题的关键在于求相交的矩形区间
给出一个矩形的左下和右上角 则相交的条件为 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 几何:判断矩形是否相交以及相交矩形坐标的更多相关文章
- 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 ...
- Codeforces Round #524 (Div. 2) C. Masha and two friends
C. Masha and two friends 题目链接:https://codeforc.es/contest/1080/problem/C 题意: 给出一个黑白相间的n*m的矩阵,现在先对一个子 ...
- Codeforces Round #524 (Div. 2) C. Masha and two friends(思维+计算几何?)
传送门 https://www.cnblogs.com/violet-acmer/p/10146350.html 题意: 有一块 n*m 的棋盘,初始,黑白块相间排列,且左下角为白块. 给出两个区间[ ...
- Codeforces Round #524 (Div. 2) C. Masha and two friends 思路
题目:题目链接 思路:直接计数显然是不好处理的,但分情况讨论只要不写错这题是一定可以出的,但这样基本做完这个题就没时间做其他题了,但当时我就这么蠢的这样做了,比赛一个半小时的时候突然发现一个似乎可行的 ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Codeforces Round #524 (Div. 2) Masha and two friends矩形
题目 题意: 给一个n*m块大的黑白相间的矩形,在这个举行中操作,要先把第一个矩形(左下角坐标(x1,y2),右上角坐标(x2,y2)) 全部涂成白色,再把第二个矩形(左下角坐标(x3,y3), ...
- 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 ...
- Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)
https://codeforces.com/contest/1080/problem/E 题意 有一个n*m(<=250)的字符矩阵,对于每个子矩阵的每一行可以任意交换字符的顺序,使得每一行每 ...
- Codeforces Round #524 (Div. 2) Solution
A. Petya and Origami Water. #include <bits/stdc++.h> using namespace std; #define ll long long ...
随机推荐
- js对象深拷贝与浅拷贝
浅拷贝 把a赋值给b,a与b指向相同的内存,修改b值,a也会跟着改变. var a = "aa"; var b = a; b = "bb"; 这个时候a也变成了 ...
- webAPI文件上传时文件过大404错误的问题
背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...
- httpclient请求服务的各种方法实例
<!--话不多说,直接上代码--> import com.csis.ConfigManagerimport com.csis.io.web.DefaultConfigItemimport ...
- 利用echarts自定义环形图
一.代码 app.title = '通讯盒各版本用户占比'; option = { backgroundColor: '#0f0f31', title: { show:true, x:"le ...
- python中集合-set
集合-set 集合是高中数学中的一个概念 一堆确定的无序的唯一的数据,集合中每一个数据成为一个元素 # 集合的定义 s = set() print(type(s)) print(s) print(&q ...
- VUE组件 之 Toast (Vue.extend 方式)
一.效果图 二.说明 这类提示框组件我们通常都会直接在 JS 代码中进行调用.像下面这样: this.$toast('别点啦,到头啦!') 但看到网上大多数还是通过 component 方式实现的, ...
- pip install 报错
问题描述,在使用pip安装django相关软件包时,提示错误如下: [root@test4 install]# pip install django==1.6 Downloading/unpackin ...
- nginx-1-初识nginx
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由Igor Sysoev为俄罗斯访问量第二的R ...
- Web API 方法的返回类型、格式器、过滤器
一.Action方法的返回类型 a) 操作方法的返回类型有四种:void.简单或复杂类型.HttpResponseMessage类型.IHttpActionResult类型. b) 如果返回类型为vo ...
- MySQL四种隔离级别和MVCC
事务在一个数据库中的地位尤为重要,尤其是高并发的场合.保证数据库操作的原子性和错误出现情况下的回滚,对数据的安全性和可靠性提供了保障.事务有四大原则,即ACID原则.网上关于这个问题的文章有很多,读者 ...