• UVALive5846


    题目大意:见刘汝佳《算法竞赛入门经典——训练指南》P173。

    解题思路:

      如果要直接求所有单色三角形的个数似乎不简单,正难则反,先求出所有非单色三角形 cnt,answer = C(n,3)- cnt。

      首先,对于每一个非单色三角形,一定有2个点对应一对异色边,那么我们只需要统计每一个点连接的红边或者蓝边数 t,则这个点连接的异色三角形个数为:t*(n - 1 - t),把各边的异色三角形个数加起来。按照这种方式,对于每一个非单色三角形我们都会从它的2个连接着一对异色边的点计算各一次,所以我们要将得到的异色三角形总数除以二就可以得到正确的 cnt。

    AC代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 
     5 using namespace std;
     6 typedef long long ll;
     7 const int maxn=1003;
     8 bool color[maxn][maxn];
     9 int main()
    10 {
    11     int T,tmp;
    12     int N;
    13     scanf("%d",&T);
    14     while(T--){
    15         ll t1=0;
    16         scanf("%d",&N);
    17         for(int i=1;i<N;i+=1){
    18             for(int j=i+1;j<=N;j+=1){
    19                 scanf("%d",&tmp);
    20                 if(tmp) color[i][j]=color[j][i]=true;
    21                 else    color[i][j]=color[j][i]=false;
    22             }
    23         }
    24         for(int i=1;i<=N;i++){
    25             ll on=0;
    26             for(int j=1;j<=N;j++){
    27                 if(i==j)    continue;
    28                 if(color[i][j]) on++;
    29             }
    30             t1+=(on*(N-1-on));
    31         }
    32         ll ans=(ll)N*(N-2)*(N-1)/6-t1/2;
    33         printf("%lld
    ",ans);
    34     }
    35     return 0;
    36 }
    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    python的字符串连接操作符+
    python-在定义函数时,不定长参数中,默认值参数不能放在必选参数前面
    python中的sort方法使用详解
    详解Python中的join()函数的用法
    python中map()函数
    python的匿名函数lambda解释及用法
    python 代码的缩进位置决定执行部分
    python代码位置引发的错误
    python中如何使输出不换行
    git stash
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/7636308.html
Copyright © 2020-2023  润新知