题目描述 

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

输入描述

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

输出描述

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

样例输入
4 2

1 2 3 4

样例输出 
3

解析:

以样例为例,先把这一排数排个序:1 2 3 4 ,用一个 a[] 数组储存

从小到大:

1.如果 a[i]%P!=0 ,那 a[i] 一定在答案里,ans++,标记 a[i] 已存在

2.如果 a[i]%P==0 ,先算出除数 q=a[i]/P,再查询 q 是否已存在,q 一定在 a[i] 之前,如果 q 没出现过,则再不会有 a[i] = q*P,因此 ans++

我们用一个动态数组来进行操作:
  • Case 1:先将 a[i] hash 一下, mp[ hash(a[i]) ].push_back(a[i])
  • Case 2:Find( a[i]/p )
 
代码如下:
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
const int mod=1e5+7;
vector<int> mp[mod];
int n,p,ans;
int a[100001];int hash(int x){return x%mod;
}bool Find(int x)
{for(int i=0;i<mp[hash(x)].size();++i){if(x == mp[hash(x)][i]) return 1;}return 0;
}int main()
{scanf("%d%d",&n,&p);for(int i=1;i<=n;++i){scanf("%d",&a[i]);}sort(a+1,a+1+n);for(int i=1;i<=n;++i){if(a[i]%p || !Find( a[i]/p ) ){ans++;mp[hash(a[i])].push_back(a[i]);}}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/qseer/p/9418238.html

互斥的数(codevs1553)相关推荐

  1. 【codevs1553】互斥的数,二分查找是个好东西

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

  2. 【codevs1553】互斥的数

    problem solution codes /* 贪心 1.找出不互质的数的集合,就是把互斥的数删去. 2.那么当有两个互斥的数时,如果删掉前面(小)的,这个数后面的与它互斥的数也会入选,所以删掉后 ...

  3. c++ pipe 同步 互斥_数一数Linux中有多少种线程同步策略-『Linux 源码解析(二)』...

    点这里排版好一点 本来这篇应该是上周发的,拖延症又犯了 上一篇主要讨论了Linux线程的调度算法 这篇来谈谈线程间的同步问题,暂时不包括IPC(InterProcess Communication)问 ...

  4. CODE【VS】1553 互斥的数(hash表+map函数)

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

  5. codevs——1553 互斥的数

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

  6. 从零入门 FreeRTOS操作系统之信号量

    从零入门 FreeRTOS操作系统之信号量 1 信号量的基本概念 信号量 (Semaphore) 是一种实现任务间通信的机制,可以实现任务之间同步或临界资源的互斥访问,常用于协助一组相互竞争的任务来访 ...

  7. HDU - 1796 How many integers can you find(容斥原理)

    题目链接:点击查看 题目大意:给出一个n,再给出一个含有m个数的集合,问1~n-1中有多少个数可以被集合中的所有数字整除 题目分析:因为1~n-1中的每个数可能会被整除多次,所以我们可以利用容斥原理枚 ...

  8. POJ - 1091 跳蚤(容斥原理+数论)

    题目链接:点击查看 题目大意:中文题意,不多赘述 题目分析:根据题目的意思,其实只需要让所有数的最大公约数为1就可以满足条件,好像是用到了欧几里得的一些知识,奈何我的数论比较菜,也不会证明,就直接用网 ...

  9. HDU - 4135 Co-prime(容斥原理)

    题目链接:点击查看 题目大意:给出一个区间[l,r],再给出一个n,问区间中有多少个数与n互质 题目分析:容斥原理应用的经典题目,马克一篇非常不错的博客,留着以后慢慢消化: https://blog. ...

最新文章

  1. Linux 终端訪问 FTP 及 上传下载 文件
  2. 108.什么是信道?109.信道分类 110.什么是模拟信号?什么是数字信号?
  3. 1231 最优布线问题
  4. java怎么导入图片_iPad Pro插U盘不能导入图片?技术宅教你怎么做
  5. 用户自定义属性表结构设计_属性类型定制及其妙用
  6. 测试运维该学些什么?怎么入门,怎么进阶?
  7. 两者结合在一起看SphereFace
  8. HTTP MIME 类型
  9. Java笔记1(2015-8-30)
  10. SDK环境变量配置 adb配置
  11. 5G手机和4G手机的区别
  12. LA 5846 霓虹灯广告牌(单色三角形问题)
  13. 冯诺伊曼体系结构建模与模拟 之TOY模型机※
  14. 数学黑洞6174问题
  15. linux的system函数命令大全,Linux下system函数
  16. HDU2550 百步穿杨【打印图案】
  17. 2010 Esri中国区域用户大会9月14日开幕
  18. Autodesk Maya 2019 安装
  19. 【2022年】的网页转 App 教程
  20. android蓝牙投屏连接不上,乐播投屏常见使用问题汇总

热门文章

  1. 【图像隐藏】基于混合 DWT-HD-SVD 的数字图像水印方法技术附matlab代码
  2. 小牛电动车09Z和10Z的区别
  3. 深入理解7816协议(1)---- 关于F/D和etu
  4. 什么是语义分割?原理+实现过程?
  5. 华师计算机调剂深大,提前批院校补录12日12时前网上确认 华师 深大 广大仍有缺额...
  6. 新品发布 | 刚入门接触无人机?推荐一款S450给你
  7. “狙击波”病毒预防及处理办法
  8. OneNote+vscode+markdwon的综合方式记笔记
  9. 韩松手机摄影笔记第六课--手机滤镜VSCO
  10. linux 6 双网关 双路由器,rhel6.5双网卡双网关的配置