uva1511(找规律。。。)

来源:互联网 发布:sublime text 3 java 编辑:程序博客网 时间:2024/05/29 16:14

题意:

给出n个点,n个点构成了完全图,每条边是红色或者是蓝色,问这个图中有多少个三角形三条边都是同一个颜色。


思路:

本想暴力,看见榜单上大家都TLE了,不敢暴力了,就找规律。

画图发现,如果三个点的边不是同一种颜色,那么一定有两个点连着不同颜色的边,所以我们统计每个点连着的红色边和蓝色边的个数,把它们相乘,累加之后除以二代表了不是三条边颜色相同的三角形的个数,用C(n,3)一减即可。


代码:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<vector>#include<map>#include<stack>#include<cmath>#include<cstdlib>#include<climits>#include<sstream>using namespace std;int color[1005][3];int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);memset(color,0,sizeof color);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){int tmp;scanf("%d",&tmp);color[i][tmp]++;color[j][tmp]++;}int ans=n*(n-1)*(n-2)/3/2;int tmp=0;for(int i=1;i<=n;i++)tmp+=(color[i][0]*color[i][1]);printf("%d\n",ans-tmp/2);}return 0;}


0 0
原创粉丝点击