zoukankan      html  css  js  c++  java
  • CF1080C Masha and two friends 题解(思维+模拟)

    题目链接

    题目大意

    给你一个长度为(n imes m (1le n,mle1e9))的矩阵

    ((x,y))((x+y)\%2=1)则为白色,否则为黑色

    首先将一个区间变为全白,再将一个区间变为全黑

    求最后矩阵的白色和黑色点

    题目思路

    首先要明白两个矩阵的相交矩阵怎么求

    a=max(x1,x3),b=max(y1,y3);
    c=min(x2,x4),d=min(y2,y4);
    

    白色的点其实就是本来的白色 + 第一次操作的初始矩阵黑色 - 第二次操作的初始矩阵白色 - 相交初始矩阵的

    黑色

    代码

    #include<bits/stdc++.h>
    #define debug printf("
     I am here
    ");
    #define fi first
    #define se second
    typedef long long ll;
    const int maxn=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
    using namespace std;
    ll n,m;
    ll getwhite(ll x1,ll y1,ll x2,ll y2){
        // 返回这个区间本来有多少个白色
        ll sum=(y2-y1+1)*(x2-x1+1);
        if((x1+y1)%2==0){
            return (sum+1)/2;
        }else{
            return sum/2;
        }
    }
    int main(){
        int _; scanf("%d",&_);
        while(_--){
            scanf("%lld%lld",&n,&m);
            ll x1,y1,x2,y2,x3,y3,x4,y4;
            ll a,b,c,d;
            scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
            scanf("%lld%lld%lld%lld",&x3,&y3,&x4,&y4);
            a=max(x1,x3),b=max(y1,y3);
            c=min(x2,x4),d=min(y2,y4);
            // 初始的白色点
            ll bai=(n*m+1)/2;
            bai+=(x2-x1+1)*(y2-y1+1)-getwhite(x1,y1,x2,y2);
            bai-=getwhite(x3,y3,x4,y4);
            if(c>=a&&d>=b){
                bai-=(d-b+1)*(c-a+1)-getwhite(a,b,c,d);
            }
            printf("%lld %lld
    ",bai,n*m-bai);
        }
        return 0;
    }
    
    
    卷也卷不过,躺又躺不平
  • 相关阅读:
    vue中封装axios方法
    ajax请求步骤
    angular 封装公共方法
    vue 二级列表折叠面板
    eslint常规语法检
    angular 4 路由变化的时候实时监测刷新组件
    json写入到excel表
    angular4 常用pipe管道
    angular4 在页面跳转的时候传递多个参数到新页面
    easyui 动态加载语言包
  • 原文地址:https://www.cnblogs.com/hunxuewangzi/p/14720036.html
Copyright © 2011-2022 走看看