图论3 1011

本秂侑毒 提交于 2019-12-01 04:59:52

三角形

有一个等边三角形,在每条边上等距离画n个点,(顶点上不画,把每条边分成n+1段),在这3n个点中选取3个点作为新三角形的顶点,求所有不同三角形的面积和。

3n个点有各自的编号,两个三角形不同当且仅当选取编号集合不同,规定单位面积为边长每一段长度的等边三角形面积。

答案对1e9+7取模

1<=n<=1e9

题解

很容易分出两类:有两个点在同一边上,三点都在不同边。

1.记有两个点的边为底边。可以得到

$2*3\sum_{x=1}^{n-1}x(n-x)*\sum_{h=1}^{n}h$(顶点可以在两边选取,底边有三种

$3n(n+1)(n\sum_{x=1}^{n-1}x-\sum_{x=1}^{n-1}x^{2})$

$\frac{n^{2}(n+1)(n^{2}-1)}{2}$

2.在三边分别选边,记a,b,c为三点到所在边的左端点的距离

$\sum_{a=1}^{n}\sum_{b=1}^{n}\sum_{c=1}^{n}(n+1)^{2}-(n+1-a)b-(n+1-b)c-(n+1-c)a$

$\sum_{a=1}^{n}\sum_{b=1}^{n}\sum_{c=1}^{n}(n+1)^{2}-(n+1)(a+b+c)+ab+ac+bc$

$(n+1)^{2}$与a,b,c无关,所以可以算得贡献为$n^{3}(n+1){2}$

对于(a+b+c)可以考虑画出树形图,发现c从1-n的取值重复了$n^{2}$次,所以贡献为$\frac{n^{3}(n+1)^{2}}{2}$,a,b,c并无本质区别,所以a+b+c的贡献为$\frac{3n^{3}(n+1)^{2}}{2}$

对于后面剩下的部分只看$(a+b)c$

$(\sum_{a=1}^{n}\sum_{b=1}^{n}(a+b))*\sum_{c=1}^{n}c$

$\frac{n^{3}(n+1)^{2}}{2}$

对于$ab$可以用$\sum_{c=1}^{n}(\sum_{a=1}^{n}a*\sum_{b=1}^{n}b)$计算或者可以根据a,b,c无本质区别直接对刚才的$(a+b)c$*3/2即可

最后合并就是$\frac{n^{2}(n+1)(n^{2}-1)}{2}+\frac{n^{3}(n+1)^{2}}{4}$

#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int mod=1000000007;
const ll inv2=500000004;
const ll inv4=250000002;
ll n;
ll ret=0,ans;

int main(){
    freopen("triangle.in","r",stdin);
    freopen("triangle.out","w",stdout);
    scanf("%lld",&n);
    ans=n*n%mod*(n+1)%mod*(n*n%mod-1)%mod*inv2%mod;//有两个点在一条边 
    ans=(ans+n*n%mod*n%mod*(n+1)%mod*(n+1)%mod*inv4%mod)%mod;
    printf("%lld",(ans%mod+mod)%mod);
}
triangle

 


速度限制

题目描述

题解

考虑到v很小而且通过道路时间和速度有关,所以直接把dis多开一维记录到达i点速度为j的时候的最小时间。

在最短路时,记录标点号和速度即可。可以看做分层图(按速度分层)。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!