zoukankan      html  css  js  c++  java
  • 1553 互斥的数

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
    题目描述 Description

    有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知道给定的一个集合的最大子集满足两两之间不互斥。

    输入描述 Input Description

    输入有多组数据,每组第一行给定两个数N和P(1<=N<=10^5, 1<=P<=10^9)。接下来一行包含N个不同正整数ai(1<=ai<=10^9)。

    输出描述 Output Description

    输出一行表示最大的满足要求的子集的元素个数。

    样例输入 Sample Input

    4 2

    1 2 3 4

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint
     
    这题应该是贪心吧,
    但是这贪心比较玄学。。
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #include<map>
     7 using namespace std;
     8 void read(int &n)
     9 {
    10     char c='+';int x=0;bool flag=0;
    11     while(c<'0'||c>'9')
    12     {c=getchar();if(c=='-')flag=1;}
    13     while(c>='0'&&c<='9')
    14     {x=x*10+(c-48);c=getchar();}
    15     flag==1?n=-x:n=x;
    16 }
    17 int n;
    18 int a[1000001];
    19 int comp(int a,int b)
    20 {
    21     return a<b;
    22 }
    23 //int hash[10000001];
    24 map<int,bool>hash;
    25 int main()
    26 {
    27     int p;
    28     read(n);
    29     read(p);
    30     for(int i=1;i<=n;i++)
    31         read(a[i]);
    32     int ans=0;
    33     sort(a+1,a+n+1,comp);
    34     for(int i=1;i<=n;i++)
    35     {
    36         if(hash[a[i]]==0)
    37         {
    38             hash[a[i]*p]=1;
    39             ans++;
    40         }
    41     }
    42     printf("%d",ans);
    43     return 0;
    44 }
  • 相关阅读:
    AtCoder Beginner Contest 167
    AtCoder Beginner Contest 166
    AtCoder Beginner Contest 165
    AtCoder Beginner Contest 164
    AtCoder Beginner Contest 163
    AtCoder Beginner Contest 162
    AtCoder Beginner Contest 161
    AtCoder Beginner Contest 160
    AtCoder Beginner Contest 159
    自定义Mybatis自动生成代码规则
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7095753.html
Copyright © 2011-2022 走看看