终于等到你

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

524 (Div. 2) Masha and two friends

Codeforces Round #524 (Div. 2)

C. Masha and two friends

题目链接

题意:较为简单,初始给定这个白黑相交的格子,第一遍把坐标范围内的全部涂白,第二遍把坐标范围内的全部涂黑,问最终各个颜色的数目。

思路:写一个函数,求白黑相间矩阵内的黑色格子的数目,如果格子数为偶数,白=黑。如果为奇数,当矩阵左下角坐标x1+y1为奇数,黑色多一。然后黑色格子数处理三次,第一次减少,第二次增加,第三次(重叠的部分)增加,数目为范围内的原来的黑色格子数。

知识点,判断矩阵相交

      long long x5,y5,x6,y6;
      x5=max(x1,x3);y5=max(y1,y3);
      x6=min(x2,x4);y6=min(y2,y4);
      if(x5<=x6&&y5<=y6)

#include <iostream>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
   ll n,m;
ll num_black(ll x1,ll y1,ll x2,ll y2)
{
    ll ans=(x2-x1+1)*(y2-y1+1);
    if(ans&1 &&(x1+y1)&1)return ans/2+1;else return ans/2;
}
int main()
{
  std::ios::sync_with_stdio(false);
	std::cin.tie(0);
  int t;
  cin>>t;
  ll n,m,x1,x2,y1,y2,x3,y3,x4,y4;
   ll black;
  while(t--)
  {
      cin>>n>>m>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
      black=num_black(1,1,m,n);
      black-=num_black(x1,y1,x2,y2);
         //  cout<<black<<endl;
      black+=(x4-x3+1)*(y4-y3+1)-num_black(x3,y3,x4,y4);
       //   cout<<black<<endl;
      ll x5,y5,x6,y6;
      x5=max(x1,x3);y5=max(y1,y3);
      x6=min(x2,x4);y6=min(y2,y4);
      if(x5<=x6&&y5<=y6)black+=num_black(x5,y5,x6,y6);
 cout<<n*m-black<<" "<<black<<endl;

  }
    return 0;
}
posted @ 2018-11-26 17:08  gzr2018  阅读(122)  评论(0编辑  收藏  举报