zoukankan      html  css  js  c++  java
  • 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的图.但是要注意判重,重复的时候是不会再减少的(能明白么?)

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

  • 相关阅读:
    Java中Volatile关键字详解
    java hashmap&concurrentHashmap源理
    java CAS和AQS
    jvm内存模型
    springAop源码分析
    一个项目设置两个git地址,并最终实现一次性同时推送到到两个git地址上的方法总结
    H5实现横向滚动的方法总结
    tab吸顶的神奇-- css粘性属性
    H5制作显示轮播图的方法Swiper
    微信H5中禁止分享好友及分享到朋友圈的方法
  • 原文地址:https://www.cnblogs.com/Skyvot/p/4074679.html
Copyright © 2011-2022 走看看