zoukankan      html  css  js  c++  java
  • HDU 5047

    HDU 5047 Sawtooth


    网上看到一个不错的 贴子 ,所以写一篇博客作为学习笔记

    因为要尽可能使得相交后的空间更多,则任意的一对 (M) 应交于不同的位置,否则产生的点数一定更少

    故在最优方案下,任意一对 (M) 的交点应该是一样的,由图可得,任意一对的交点数为 (16)

    再考虑上每个 (M) 和边框有两个交点,故图中的点数 (V=16cdot C_n^2+2n=8n^2-6n)

    而如果再已知边数 (E) ,则可根据欧拉公式 (V-E+F-T=1) 由于三维的 (T=0) ,故即可求解出分割出的面数 (F=E-V+1)


    故考虑如何求出边数 (E)

    我们考虑一个很极限的情况:图形是近乎无穷大的

    而每个 (M) 的中间拐点在接近出发的边框处,两个外边的拐点在接近另一处的边框处,但没有相交

    故可以视为 (M) 的四条边是近乎相互平行的四条边

    而在之前的假设中,任意一对 (M) 都应该尽可能相交,故 (M) 的四条边都被其他 ((n-1))(M) 划分出了 (4(n-1)) 个分割点,产生了 (4(n-1)+1) 段边

    故四条平行的边,对 (E) 的贡献就是 (4n[4(n-1)+1]=16n^2-12n)

    其次,再考虑和边框的交点,每个 (M) 与边框产生 (2) 个交点, (n)(M) 即为 (2n) 个交点,把成环的边框分成了 (2n)

    最后,再考虑 (M) 的三个拐点。在上面的 (4(n-1)+1) 段边中,我们把它们两边的边视为了不同的边

    但实际上,这些拐点并不是交点,因此它们两边的边实际上不能视为不同的边。故每个拐点重复计算了一次,一个 (M) 计算了 (3) 次,总的重复计算了 (3n)

    最后得到 (E=16n^2-12n-3n+2n=16n^2-13n)


    合成得到 (F=E-V+1=8n^2-7n+1) ,考虑秦九韶算法可整理成 (F=(8n-7)n+1)

    由于 (nleq 10^{12}) 我们估计一下最后的大小:

    该结果为开口向上的二次函数,最大值在端点处取到,显然不是 (1) 处,故为 (8 imes 10^{24}-7 imes 10^{12}+1geq 7 imes 10^{24}) 已经超过 long long 了

    long long 的最大值大概在 (10^{18})

    不过很显然,答案不超过 (8 imes 10^{24}) ,而 ( ext{lb }(8 imes 10^{24})=3+24 ext{lb }10leq 3+24 ext{lb }16=3+24*4=99leq 128)

    因此可以用 __int128 水过去

    记得 __int128 不支持输入输出,需要手写即可


    【代码】

    #include<bits/stdc++.h>
    using namespace std;
    inline __int128 read(){
        register __int128 ans=0;register char c=getchar();while(c<48||c>57) c=getchar();
        while(c>=48&&c<=57) ans=ans*10+c-48,c=getchar();
        return ans;
    }
    inline void output(__int128 ans){
        char s[128]={0},*p=s+126;
        while(ans) *(p--)=ans%10+48,ans/=10;
        puts(p+1);
    }
    int main(){
        __int128 T=read(),N;
        for(int i=1;i<=T;i++)
            N=read(),printf("Case #%d: ",i),output( (8*N-7)*N+1 );
        return 0;
    }
    
  • 相关阅读:
    Python3爬虫系列:理论+实验+爬取妹子图实战
    虚机安装后无网卡、网卡驱动
    Linux运维工程师面试题整理
    睡眠或者重启windows,无法ssh连接或者pingVMware的虚机
    W10: Warning: Changing a readonly file使用vi/vim报错问题解决
    keyboard-interactive authentication with the ssh2 server failed 的SecureCRT报错解决
    公网访问内网实现(内网穿透)
    Linux内网时钟同步问题(ntp和chrony)
    xshell的快捷复制粘贴设置
    Linux中shell去除空行的几种方法
  • 原文地址:https://www.cnblogs.com/JustinRochester/p/13354165.html
Copyright © 2011-2022 走看看