码迷,mamicode.com
首页 > 其他好文 > 详细

题解 LA5846

时间:2020-01-15 23:05:58      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:for   getchar   get   之间   eof   turn   line   三角形   max   

题目大意 多组数据,每组数据给定一个有 \(n\) 个点的圆,每两点之间连一条线段,每条线段只能为红蓝两色。给定线段的颜色,求单色三角形的个数。

分析 不难想到找出不单色三角形的个数。考虑一个不单色三角形,则其有且仅有两个顶点连出了两条不同颜色的线段。那么可以枚举每个顶点,由该顶点组成的不单色三角形个数为该顶点连出的红边个数乘以蓝边个数。将答案累加后除以二,再用总个数去减它即为答案。

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1005;

int T, n, ans;
int red[maxn];

inline int Read()
{
    int x = 0, op = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9') {
        if(ch == '-') op = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        x = (x << 3) + (x << 1) + (ch - '0');
        ch = getchar();
    }
    return x * op;
}

int main()
{
    T= Read();
    while(T--) {
        memset(red, 0, sizeof red);
        
        n = Read(), ans = 0;
        for(int i = 1; i <= n; ++i) {
            for(int j = i + 1; j <= n; ++j)
                if(Read()) ++red[i], ++red[j];
            ans += red[i] * (n - red[i] - 1);
        }
        printf("%d\n", n * (n - 1) * (n - 2) / 6 - ans / 2);
    }
}

题解 LA5846

标签:for   getchar   get   之间   eof   turn   line   三角形   max   

原文地址:https://www.cnblogs.com/whx1003/p/12199014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!