zoukankan      html  css  js  c++  java
  • ZOJ 1426 Counting Rectangles

    枚举两条竖线之间同时与这两条竖线相交的横线的个数cnt,这两条竖线之间能组成矩形的个数为:从cnt中任选两条横线的方案个数。

    将每两条竖线之间能组成矩形的个数加起来就是结果。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <algorithm>
     5 #include <vector>
     6 
     7 using namespace std;
     8 
     9 const int MAXN = 110;
    10 
    11 struct MyLine
    12 {
    13     int st;
    14     int ed;
    15     int th;
    16     MyLine() {}
    17     MyLine( int _st, int _ed, int _th ): st(_st), ed(_ed), th(_th) { }
    18 };
    19 
    20 vector<MyLine> hori;
    21 vector<MyLine> vert;
    22 bool ok[MAXN][MAXN];
    23 
    24 int solved()
    25 {
    26     int ans = 0;
    27     int lenH = hori.size();
    28     int lenV = vert.size();
    29 
    30     memset( ok, false, sizeof(ok) );
    31 
    32     for ( int i = 0; i < lenH; ++i )
    33     {
    34         for ( int j = 0; j < lenV; ++j )
    35             if ( vert[j].th >= hori[i].st && vert[j].th <= hori[i].ed
    36                 && hori[i].th >= vert[j].st && hori[i].th <= vert[j].ed ) ok[i][j] = true;
    37     }
    38 
    39 
    40     for ( int i = 0; i < lenH; ++i )
    41     for ( int j = i + 1; j < lenH; ++j )
    42     {
    43         int cnt = 0;
    44         for ( int k = 0; k < lenV; ++k )
    45         if ( ok[i][k] && ok[j][k] ) ++cnt;
    46         ans += cnt * (cnt - 1) / 2;
    47     }
    48 
    49     return ans;
    50 }
    51 
    52 int main()
    53 {
    54    // freopen( "input.txt", "r", stdin );
    55     int T;
    56     scanf( "%d", &T );
    57     while ( T-- )
    58     {
    59         int N;
    60         scanf( "%d", &N );
    61         int x1, y1, x2, y2;
    62         vert.clear();
    63         hori.clear();
    64         for ( int i = 0; i < N; ++i )
    65         {
    66             scanf( "%d%d%d%d", &x1, &y1, &x2, &y2 );
    67             if ( x1 == x2 )
    68             {
    69                 if ( y1 > y2 ) swap( y1, y2 );
    70                 hori.push_back( MyLine( y1, y2, x1 ) );
    71             }
    72             else if ( y1 == y2 )
    73             {
    74                 if ( x1 > x2 ) swap( x1, x2 );
    75                 vert.push_back( MyLine( x1, x2, y1 ) );
    76             }
    77         }
    78 
    79         printf( "%d\n", solved() );
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    MvcApplication 中方法的那点事
    Html 中阻止事件冒泡的三种方法比较
    WPF中 ItemsSource 和DataContext不同点
    解决:Visual Studio 启动就报错退出
    webapi是如何绑定参数的(How WebAPI does Parameter Binding)
    %cd% 和%~dp0%的区别及cd跨盘符切换路径问题
    win10中matlabR2015b安装libsvm
    MATLAB2015b链接MinGW编译器
    网易内推编程题:异或运算求混合颜料的最小种类
    小易喜欢的单词
  • 原文地址:https://www.cnblogs.com/GBRgbr/p/3086335.html
Copyright © 2011-2022 走看看