zoukankan      html  css  js  c++  java
  • 【BZOJ2190】【SDOI2008】仪仗队

    Description

      作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。       现在,C君希望你告诉他队伍整齐时能看到的学生人数。

    Input

      共一个数N。

    Output

      共一个数,即C君应看到的学生人数。

    Sample Input

      4

    Sample Output

      9


    HINT

    【数据规模和约定】   对于 100% 的数据,1 ≤ N ≤ 40000

    Source

    思路:看图,是对称的,以对角线为对称轴分开,先不看特殊的三个点,计算发现行上的点满足欧拉函数,于是线性筛求2~n-1欧拉函数即可,最后别忘了对称和特殊的三个点。时间10sec不线性筛也行?
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #define N 40000
     5 using namespace std;
     6 int flag[N+10],prime[N+10],phi[N+10];
     7 int n,ans;
     8 void erphi()
     9 {
    10     int k=1;
    11     memset(flag,0,sizeof(flag));
    12     for (int i=2;i<=n;i++)
    13     {
    14         if (!flag[i])    prime[k++]=i,phi[i]=i-1;
    15         for (int j=1;j<k&&i*prime[j]<n;j++)
    16         {
    17             flag[i*prime[j]]=true;
    18             if (i%prime[j]==0)    
    19             {
    20                 phi[i*prime[j]]=phi[i]*prime[j];
    21                 break;
    22             }
    23             else    phi[i*prime[j]]=phi[i]*(prime[j]-1);
    24         }
    25     }
    26     return;
    27 }
    28 int main()
    29 {
    30     scanf("%d",&n);
    31     erphi();
    32     for (int i=2;i<n;i++)
    33         ans+=phi[i];
    34     printf("%d
    ",ans*2+3);
    35     return 0;
    36 }
    —Anime Otaku Save The World.
  • 相关阅读:
    (转)【web前端培训之前后端的配合(中)】继续昨日的故事
    ural(Timus) 1136. Parliament
    scau Josephus Problem
    ACMICPC Live Archive 6204 Poker End Games
    uva 10391 Compound Words
    ACMICPC Live Archive 3222 Joke with Turtles
    uva 10132 File Fragmentation
    uva 270 Lining Up
    【转】各种字符串哈希函数比较
    uva 10905 Children's Game
  • 原文地址:https://www.cnblogs.com/DMoon/p/5189532.html
Copyright © 2011-2022 走看看