zoukankan      html  css  js  c++  java
  • 计蒜客T2202 数三角形(提高组2017模拟赛(三)day2T3) LZOJ3878攻略

    今天模拟赛考了一道计蒜客NOIP2017模拟赛(三)day2T3的数三角形,原题链接 https://nanti.jisuanke.com/t/T2202 ,LZOJ3878攻略。场上想了很久都没转化出来,后来觉得这道想法题很妙,记录一下。

    题意:

    数出一个完全图中完全异色三角形( imes 3)-完全同色三角形( imes 6)的答案是多少。

    解法:

    方法一:

    转化为:题目本质上是出现同色三角形好感度-9,出现两条边相等另一条不同的三角形好感度-3, 数一数同色角的个数就行了

    方法二:

    个人感觉很好理解的,比方法一要好。

    (A)为同色角的个数(同色角是指一个顶点连接的两条边颜色相同),(B)为异色角的个数。

    设三角形中三条边同色的个数为(x),三条边均不同颜色的个数为(y),其他三角的个数有(z)个。

    则可以列出下列表格:

    三条同色边三角形(x) 三条异色边三角形(y) 其他三角形(z)
    (A) 3 0 1
    (B) 0 3 2

    可以列出以下两条等式:

    (A=3 imes x+zquadquad B=3 imes y+2 imes z)

    而题目要求同色三角形权值为(-6),异色三角形权值为(3),即(-6 imes x+3 imes y)

    所以答案就是(-2 imes A+B)

    #include<cstdio>
    using namespace std;
    
    const int maxn=100010;
    int n,m,a[maxn][2];
    long long A,B;
    
    int main()
    {
    	int i,x,y,z;
    	scanf("%d%d",&n,&m);
    	for (i=1;i<=m;i++)
    	{
    		scanf("%d%d%d",&x,&y,&z);
    		z--;
    		a[x][z]++,a[y][z]++;
    	}
    	for (i=1;i<=n;i++)
    	{
    		x=a[i][0],y=a[i][1],z=n-1-x-y;
    		A+=(1ll*x*(x-1)>>1)+(1ll*y*(y-1)>>1)+(1ll*z*(z-1)>>1);
    		B+=1ll*x*y+1ll*y*z+1ll*z*x;
    	}
    	printf("%lld
    ",-2*A+B);
    	return 0;
    }
    
  • 相关阅读:
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习
    android 学习
    每日日报
  • 原文地址:https://www.cnblogs.com/Ronald-MOK1426/p/11727272.html
Copyright © 2011-2022 走看看