【wikioi】1553 互斥的数(hash+set)

时间:2022-01-09 22:33:44

http://wikioi.com/problem/1553/

一开始我也知道用set来判a[i]/p是否在集合中,在的话就直接删掉。

但是我没有想到要排序,也没有想到当存在a,b使得a/p==b时到底删哪个。

所以我写出来后样例都过不了。

看题解。。

恩。。。先排序,然后依次扫过去,如果a[i]/p不是整数或者不在集合中,就将它加入到集合中,否则计数器-1(初始为n)

这样做的原因是。。当存在a和b使得a/p==b时,我们一定是删掉a(此时a>b),因为在后边几乎不会找到与b互斥的数(几乎是因为可能有重复),即找不到b*p了,但是有可能找到a*p,因为后边的数都比a大,设这个数为k,就有可能k/p==a

以此类推。。

集合我用set了。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getnum()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline int getnum() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }
set<int> s;
const int N=100005;
int n, a[N], p; int main() {
read(n); read(p);
int sum=n;
for1(i, 1, n) read(a[i]);
sort(a+1, a+1+n);
for1(i, 1, n) {
if(a[i]%p==0) {
if(s.count(a[i]/p)==0) s.insert(a[i]);
else --sum;
}
else s.insert(a[i]);
}
print(sum);
return 0;
}

题目描述 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

【wikioi】1553 互斥的数(hash+set)的更多相关文章

  1. Codevs No&period;1553 互斥的数

    2016-05-31 21:34:15 题目链接: 互斥的数 (Codevs No.1553) 题目大意: 给N个数,如果其中两个数满足一个数是另一个的P倍,则称它俩互斥,求一个不互斥集合的最大容量 ...

  2. codevs——1553 互斥的数

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解     题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同 ...

  3. codevs 1553 互斥的数

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数, ...

  4. 互斥的数(hash)

    1553 互斥的数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定, ...

  5. codevs1553 互斥的数

    1553 互斥的数    

  6. 互斥的数(codevs 1553)

    题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...

  7. &lbrack;wikioi1553&rsqb;互斥的数(数学分析&plus;散列&sol;数学分析&plus;二分)

    题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...

  8. CODEVS1533 互斥的数(哈希表)

    给定一个集合,要求一个最大子集,满足两两之间不互斥.对两个数x,y互斥的定义是,y=p*x. 先对集合中的数从小到大排序后线性扫,若一个数x可以取则取,取完之后p*x这个数不可取.由于数字较大,使用哈 ...

  9. &lbrack;Swust OJ 137&rsqb;--波浪数&lpar;hash&plus;波浪数构造&rpar;

    题目链接:http://acm.swust.edu.cn/problem/137/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

随机推荐

  1. 剖析并利用Visual Studio Code在Mac上编译、调试c&num;程序

    0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...

  2. 玩转 H5 下拉上滑动效果

    在APP中我们经常会在页面下拉时看到一些动效,例如下拉图片跟随放大.下拉刷新出现loading动画等,这个交互细节在各个主流APP以及手机原生系统中随处可见,能为APP增添个性亮点. 一.背景 在我们 ...

  3. Eclipse设置JSP页面的默认编码

    1.一般新建jsp页面是默认编码为ISO-8895-1编码.但是,实际应用中为避免编码问题带来的麻烦,我们一般需要设置默认编码为UTF-8. 2.设置 Eclipse->Window->P ...

  4. Servlet 基础知识

    8.Response  8.1.getOutputStream和getWriter方法分别用于得到输出二进制数据.输出文本数据的ServletOutputStream .Printwriter对象.  ...

  5. HashMap原理总结

    来总结一下HashMap的原理 1.HashMap当中有一个内部类,它叫Node,然后这个Node呢,它其实是实现了Map.Entry接口,这个接口当中有几个抽象的方法和几个具体的方法.其中Map.E ...

  6. Delphi 7中的四种消息框

    Delphi中平常使用的消息框有四种形式,有ShowMessage.MessageDlg.Application.MessageBox.MessageBox.下面来深入了解下这四种形式的实现和使用.1 ...

  7. 一篇入门 -- Git

    一. Git 介绍 Git作为一款分布式的==版本控制==工具,作为一名程序员,是必须要掌握的. 最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布.最初目的是为更好地 ...

  8. 使用 Oracle Data Access Components连接oracel

    使用微软自带的oracle连接类,在framework4.0中被标识为弃用,强行用它开发了Winform程序,发布放到XP上提示: Error System.Data.OracleClient req ...

  9. Java-Runtime 类

    https://www.cnblogs.com/slyfox/p/7272048.html Java-Runtime 类 Runtime 类代表着Java程序的运行时环境,每个Java程序都有一个Ru ...

  10. &lbrack;改善&rsqb; dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题

    问题:dcef3 for Firemonkey 浏览器控件,拉动窗体大小会闪烁的问题 修改源码:ceffmx.pas 找到 procedure TCustomChromiumFMX.Resize; 修 ...