zoukankan      html  css  js  c++  java
  • 省赛 F: Four-tuples

    时间限制: 10 Sec 内存限制: 128 MB

    题目描述

    Given l1,r1,l2,r2,l3,r3,l4,r4, please count the number of four-tuples (x1,x2,x3,x4) such that li≤ xi≤ ri and x1≠x2,x2≠x3,x3≠x4,x4≠x1. The answer should modulo 10^9+7 before output.

    输入

    The input consists of several test cases. The first line gives the number of test cases, T(1≤ T≤ 10^6). For each test case, the input contains one line with 8 integers l1,r1,l2, r2, l3,r3,l4,r4(1≤ li≤ ri≤ 10^9)

    输出 For each test case, output one line containing one integer, representing the answer.

    样例输入

    1 1 1 2 2 3 3 4 4

    样例输出

    容斥定理,先把每一部分的交集求出来,然后根据公式求。

    AC代码;

    include <bits/stdc++.h>
    using namespace std;
    
    int bijiao[20];//每次比较时记录四个坐标
    
    int jiaoji(int x1,int x2,int y1,int y2)//求交集
    
    {if(x2<y1||x2>y2)
    
    {
    
        return 0;
    
    }
    
    else
    
    {
    
       bijiao[0]=x1;
    
       bijiao[1]=x2;
    
       bijiao[2]=y1;
    
       bijiao[3]=y2;
    
       sort(bijiao,bijiao+4);
       return bijiao[2]-bijiao[1]+1;
    }
    }
    
    int main()
    
    {
    
    int T;
    
    int a[5][2];
    
    long long int b[100][100];
    
    scanf("%d",&T);
    
    while(T--)
    
    { scanf("%d%d%d%d%d%d%d%d",&a[0][0],&a[0][1],&a[1][0],&a[1][1],&a[2][0],&a[2][1],&a[3][0],&a[3][1]);
    
     b[0][1]=a[0][1]-a[0][0]+1;
     b[0][2]=a[1][1]-a[1][0]+1;
     b[0][3]=a[2][1]-a[2][0]+1;
     b[0][4]=a[3][1]-a[3][0]+1;
     b[1][2]=jiaoji(a[0][0],a[0][1],a[1][0],a[1][1]);
     b[1][3]=jiaoji(a[0][0],a[0][1],a[2][0],a[2][1]);
     b[1][4]=jiaoji(a[0][0],a[0][1],a[3][0],a[3][1]);
     b[2][3]=jiaoji(a[1][0],a[1][1],a[2][0],a[2][1]);
     b[2][4]=jiaoji(a[1][0],a[1][1],a[3][0],a[3][1]);
     b[3][4]=jiaoji(a[2][0],a[2][1],a[3][0],a[3][1]);
     if(b[1][2]==0)
     {
         b[12][34]=0;
     }
     else
     {
        int p=jiaoji(a[0][0],a[0][1],a[1][0],a[1][1]);
        b[12][34]=jiaoji(bijiao[2],bijiao[1],a[2][0],a[2][1]);
     }
     if(b[1][3]==0)
     {
         b[13][42]=0;
     }
     else
     {
        int p=jiaoji(a[0][0],a[0][1],a[2][0],a[2][1]);
        b[13][42]=jiaoji(bijiao[2],bijiao[1],a[3][0],a[3][1]);
     }
     if(b[1][2]==0)
     {
         b[12][43]=0;
     }
     else
     {
        int p=jiaoji(a[0][0],a[0][1],a[1][0],a[1][1]);
        b[12][43]=jiaoji(bijiao[2],bijiao[1],a[3][0],a[3][1]);
     }
      if(b[2][3]==0)
     {
         b[23][41]=0;
     }
     else
     {
        int p=jiaoji(a[1][0],a[1][1],a[2][0],a[2][1]);
        b[23][41]=jiaoji(bijiao[2],bijiao[1],a[3][0],a[3][1]);
     }
     if(b[12][34]==0)
     {
         b[11][11]=0;
     }
     else
     {
        int p=jiaoji(a[0][0],a[0][1],a[1][0],a[1][1]);
        b[12][34]=jiaoji(bijiao[2],bijiao[1],a[2][0],a[2][1]);
    
        b[11][11]=jiaoji(bijiao[2],bijiao[1],a[3][0],a[3][1]);
    
     }
     long long int s;
    
    s=(((b[0][4]*b[0][1]%1000000007)*b[0][2]%1000000007)*b[0][3]%1000000007);
    
     s=(s-((b[1][2]*b[0][3]%1000000007)*b[0][4]%1000000007)+1000000007)%1000000007;
    
     s=(s-((b[1][4]*b[0][2]%1000000007)*b[0][3]%1000000007)-((b[2][3]*b[0][1]%1000000007)*b[0][4]%1000000007)+1000000007)%1000000007;
     s=(s-((b[3][4]*b[0][1]%1000000007)*b[0][2]%1000000007)+1000000007)%1000000007;
     s=(s+(b[12][34]*b[0][4])%1000000007)%1000000007;
     s=(s+b[1][2]*b[3][4]%1000000007)%1000000007;
     s=(s+b[2][3]*b[1][4]%1000000007)%1000000007;
     s=(s+b[12][43]*b[0][3])%1000000007;
     s=(s+b[13][42]*b[0][2])%1000000007;
     s=(s+b[23][41]*b[0][1])%1000000007;
     s=(s-b[11][11]*3+1000000007)%1000000007;
     printf("%lld
    ",s);
    } return 0; }
    View Code
  • 相关阅读:
    静态区,堆,栈
    C语言位操作
    引用形参
    联合体/共同体 union
    typedef的使用
    有源晶振和无源晶振
    什么是SMT钢网
    点名游戏~自己先作
    我同学——应聘阿里巴巴之经过
    阳光明媚的一天~|~
  • 原文地址:https://www.cnblogs.com/xiaolaji/p/9135741.html
Copyright © 2011-2022 走看看