uva 10213
来源:互联网 发布:百知尚行 编辑:程序博客网 时间:2024/06/07 04:41
题解思路:这个题用的是欧拉公式,在平面图中,V-E+F=2,其中V是顶点数,E是边数,F是面数。对于这个题只要计算V和E就好。
我们从一个顶点开始枚举对角线,这条线左边有 i 个点,那么右边有 n-i-2 个点,那么两边的连线在这条对角线上形成 i * (n-i-2) 个交点,得到 i * (n-i-2) + 1条线段,然而每个交点,
重复计算了四次,每条线段被重复计算了二次,所以总数就是,,V 加 n 的意思就是加上原来的 n 个顶点,E 加 2n的意思就是,
先加原来 n 个点相邻的边数,然后再加上这个椭圆被这个圆分成的n条边,最后就是在总面数再减去那一个“无限面”。这个公式不要用循环来算,要化简公式,最后结果还是挺简单的。
ans = n * (n-1) * (n-2) * (n-3)/24 + n * (n-3)/2 + n + 1。
另外直接用__int128_t 就行了,不过输出要一个个输出,因为没有这样的输出格式#include<bits/stdc++.h>using namespace std;typedef __int128_t ll;const int mx = 1e4+10; long long n,m;void show(ll ans){if(ans<10) printf("%d",ans);else{show(ans/10);printf("%d",ans%10);}}int main(){while(~scanf("%lld",&m)){while(m--){scanf("%lld",&n);ll ret = 1;show(ret * n * (n-1) * (n-2) * (n-3)/24 + n * (n-3)/2 + n + 1);puts(""); }}return 0;}
阅读全文