• 两个矩形面积交


    http://codeforces.com/contest/1080/problem/C

    题意:

    给你一个n*m的棋盘,最初(1,1)上为白色,而且每个相邻的块颜色都不同。之后有两次操作,第一次操作给出x1,y2,x2,y2将(x1,y1,x2,y2)这个矩形涂为白色第二次操作给出x3,y3,x4,y4
    将(x3,y3,x4,y4)这个矩形涂为黑色
    后涂得会覆盖之前的颜色。问最终的棋盘上黑色和白色的个数

    解法:

    可以发现,矩形白色个数是由左下角的颜色和行数列数奇偶性决定的。

    先算出原矩形白色个数,

    加上黑变白的个数,

    减去白变黑的个数。

    如果两个矩形没有相交答案就是上述过程的答案。

    如果有相交就是减去相交区域黑色的个数,

    相当于黑变白的个数减少了。

     1 /*************************************************************************
     2     > File Name: 矩形面积交.cpp
     3     > Author: QWX
     4     > Mail: 
     5     > Created Time: 2018/11/24 14:24:14
     6  ************************************************************************/
     7 
     8 
     9 //{{{ #include
    10 #include<iostream>
    11 #include<cstdio>
    12 #include<algorithm>
    13 #include<vector>
    14 #include<cmath>
    15 #include<queue>
    16 #include<map>
    17 #include<set>
    18 #include<string>
    19 #include<cstring>
    20 #include<complex>
    21 #include<cassert>
    22 //#include<bits/stdc++.h>
    23 #define vi vector<ll>
    24 #define pii pair<ll,ll>
    25 #define mp make_pair
    26 #define pb push_back
    27 #define fi first
    28 #define se second
    29 #define pw(x) (1ll << (x))
    30 #define sz(x) ((ll)(x).size())
    31 #define all(x) (x).begin(),(x).end()
    32 #define rep(i,l,r) for(ll i=(l);i<(r);i++)
    33 #define per(i,r,l) for(ll i=(r);i>=(l);i--)
    34 #define FOR(i,l,r) for(ll i=(l);i<=(r);i++)
    35 #define cl(a,b) memset(a,b,sizeof(a))
    36 #define fastio ios::sync_with_stdio(false);cin.tie(0);
    37 #define lson l , mid , ls
    38 #define rson mid + 1 , r , rs
    39 #define INF 0x3f3f3f3f
    40 #define LINF 0x3f3f3f3f3f3f3f3f
    41 #define ll long long
    42 #define ull unsigned long long
    43 #define dd(x) cout << #x << " = " << (x) << "," 
    44 #define de(x) cout << #x << " = " << (x) << "
    " 
    45 #define endl "
    "
    46 using namespace std;
    47 //}}}
    48 
    49 ll n,m;
    50 ll area(ll x1,ll y1,ll x2,ll y2)
    51 {
    52     ll a=x2-x1+1,b=y2-y1+1;
    53     ll ans=a*b/2;
    54     
    55     if(a*b%2!=0&&((x1+y1)%2==0))ans++;
    56 //    dd(a),dd(b),de(ans);
    57     return ans;
    58 }
    59 
    60 ll cross(ll x1,ll y1,ll x2,ll y2,ll x3,ll y3,ll x4,ll y4)
    61 {
    62     ll lx=max(x1,x3);
    63     ll ly=max(y1,y3);
    64     ll rx=min(x2,x4);
    65     ll ry=min(y2,y4);
    66     if(lx>rx)return 0;
    67     if(ly>ry)return 0;
    68     ll a=rx-lx+1,b=ry-ly+1;
    69     ll ans=a*b/2;
    70 //    dd(lx),dd(ly),dd(rx),dd(ry);dd(a),dd(b),de(ans);
    71     if(a*b%2!=0&&((lx+ly)%2==0))ans++;
    72     return a*b-ans;
    73 }
    74 
    75 int main()
    76 {
    77     ll T; cin>>T;
    78     while(T--){
    79         ll n,m; cin>>n>>m;
    80         ll x1,y1,x2,y2,x3,y3,x4,y4;
    81         cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
    82         ll s1=n*m/2+(n*m%2?1:0);
    83         ll s2=(x2-x1+1)*(y2-y1+1)-area(x1,y1,x2,y2);
    84         ll s3=area(x3,y3,x4,y4);
    85         ll s4=cross(x1,y1,x2,y2,x3,y3,x4,y4);
    86         ll ans=s1+s2-s3-s4;
    87 //        dd(s1),dd(s2),dd(s3),de(s4);
    88         cout<<ans<<" "<<n*m-ans<<endl;
    89     }
    90     return 0;
    91 }
    View Code
  • 相关阅读:
    Azure HDInsight 现已在中国正式发布
    避免由于Windows Update自动安装安全补丁导致VM意外重启
    如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题
    关于Azure Auto Scale的高级属性配置
    在Azure中使用Load Runner测试TCP最大并发连接数
    Windows Azure案例分析: 选择虚拟机或云服务?
    Windows Server基础架构云参考架构:硬件之上的设计
    浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案
    在Windows Azure公有云环境部署企业应用
    如何在后台运行_Linux_命令并且将进程脱离终端
  • 原文地址:https://www.cnblogs.com/klaycf/p/10053616.html
Copyright © 2020-2023  润新知