zoukankan      html  css  js  c++  java
  • BZOJ2190: [SDOI2008]仪仗队

    【传送门:BZOJ2190


    简要题意:

      给出一个有n*n个点的图,求出从左下角的点能够无障碍连接的点数


    题解:

      就稍微想了一下下

      首先无障碍说明构成的直线上没有其他点,同时也说明当前被连接的点的纵距离/横距离为最简分数(可以用什么相似三角形之类的证明一下啦)

      然后这道题就转化成求1到n-1中不同的互质数对,因为n*n的图最长距离为n-1

      就用欧拉来求

      然后要把得出来的值*2+3,因为图有对称性,所以要*2,因为最下角的三条边也要加上,而欧拉的时候是得不到这三个的


    参考代码:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int phi[41000];
    int n;
    void oula()
    {
        for(int i=2;i<=n;i++) phi[i]=i;
        for(int i=2;i<=n;i++)
        {
            if(phi[i]==i) for(int j=i;j<=n;j+=i) phi[j]-=phi[j]/i;
            phi[i]+=phi[i-1];
        }
    }
    int main()
    {
        scanf("%d",&n);
        n--;
        oula();
        printf("%d
    ",phi[n]*2+3);
        return 0;
    }

     

  • 相关阅读:
    冲刺1
    第九周
    课堂作业
    团队项目典型用户与用户场景分析
    第八周
    梦断代码阅读笔记03
    tab页的使用方法
    校园服务nabcd需求分析
    第七周
    mysql下载以及安装
  • 原文地址:https://www.cnblogs.com/Never-mind/p/8513818.html
Copyright © 2011-2022 走看看