• review 10.9


    Problem 1. How many primes?

    求 {1, 2, . . . , N } 中素数的个数。

    Input
    1 个整数 N 。
    Output
    1 个整数,表示素数的个数。

    Note
    • 对于 40% 的数据,1 ≤ N ≤ 10^6
    • 对于 80% 的数据,1 ≤ N ≤ 10^7
    • 对于 100% 的数据,1 ≤ N ≤ 10^8

    题解:这是要我打个线性筛么?

    注意,数据丧狂,only线性筛

    代码如下code

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 #define maxn 100000009
     5 int n,cnt;
     6 bool p[maxn];
     7 int prime[maxn];
     8 void get()
     9 {
    10     p[1]=0;
    11     for(int i=2;i<=n;i++)
    12     {
    13         if(!p[i])prime[++prime[0]]=i;
    14         for(int j=1;j<=prime[0];j++)
    15         {
    16             if(prime[j]*i>n)break;
    17             p[i*prime[j]]=true;
    18             if(i%j==0)break;
    19         }
    20     }
    21 }
    22 int main()
    23 {
    24     cin>>n;
    25     get();
    26     for(int i=1;i<=n;i++)
    27     {
    28         if(p[i])cnt++;
    29     }
    30     cout<<cnt<<endl;
    31     return 0;
    32 }
    33 //我没测试,不过应该对
    View Code

    Problem 2. How many rooks?

    N × N 的国际象棋棋盘上有 K 个车,第 i 个车位于第 Ri 行,第 Ci 列。求至少被一个车攻击的格子数量。

    Input
    第 1 行,2 个整数 N, K。
    接下来 K 行,每行 2 个整数 Ri , Ci 。
    Output
    1 个整数,表示被攻击的格子数量。

    Note
    • 对于 30% 的数据,1 ≤ N ≤ 10^3, 1 ≤ K ≤ 10^3;
    • 对于 60% 的数据,1 ≤ N ≤ 10^6, 1 ≤ K ≤ 10^6;
    • 对于 100% 的数据,1 ≤ N ≤ 10^9, 1 ≤ K ≤ 10^6, 1 ≤ Ri , Ci ≤ N 。

    正解:hash一下

    详细的说:

    我们求一个车能攻击到的范围,可以转化一下,转化成求解剩余的格子的数目,然后我们用总数减去剩余格子数就好了。

    事实上画个图的话如下

    如图,我们放入一个车之后,我们可以得到一张新的图:相当于长和宽都减少1的图.但是要注意判重,重复的时候是不会再减少的(能明白么?)

    然后我用了很奇葩的方法,这里就不贴自己的代码了。处理好行和列的判重与计数就好了。

  • 相关阅读:
    webService总结(一)——使用CXF公布和调用webService(不使用Spring)
    男人最佳的生育年限,程序猿们,看看吧!!!
    软考之路(5)——计算机组成原理之加密技术和认证技术
    新安装mysql 第三方工具连接不上问题
    JQuery text()、html() 以及 val()
    DOM
    Spring Boot 学习
    JSON
    Nodejs 配置+基础
    配置-
  • 原文地址:https://www.cnblogs.com/Skyvot/p/4074679.html
Copyright © 2020-2023  润新知