codeforces 274A k-Multiple Free Set
2016-07-27 20:55
323 查看
K-Multiple Free Set
Description A k-multiple free set is a set of integers where there is no pair of integers where one is equal to another integer multiplied by k. That is, there are no two integers x and y(x < y) from the set, such that y = x·k. You're given a set of n distinct positive integers. Your task is to find the size of it's largest k-multiple free subset. Input The first line of the input contains two integers n and k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109). The next line contains a list of n distinct positive integers a1, a2, ..., an(1 ≤ ai ≤ 109). All the numbers in the lines are separated by single spaces. Output On the only line of the output print the size of the largest k-multiple free subset of {a1, a2, ..., an} Sample Input Input 6 2 2 3 6 5 4 10 Output 3 Hint In the sample input one of the possible maximum 2-multiple free subsets is {4, 5, 6} 代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; long long a[100010]; int s[100010]; int main() { int n,k,i; while(~scanf("%d%d",&n,&k)) { for(i=0;i<n;i++) scanf("%lld",&a[i]); sort(a,a+n); memset(s,0,sizeof(s)); int ans=n; for(i=0;i<n;i++) { if(s[i]) continue; int l=i+1,r=n; long long tmp=k*a[i]; while(r>=l) { int mid=(l+r)/2; if(a[mid]==tmp) { s[mid]=true; ans--; break; } else if(a[mid]>tmp) r=mid-1; else l=mid+1; } } printf("%d\n",ans); } return 0; }
相关文章推荐
- 最大子序列和 Maximum Subarray
- iOS屏幕尺寸和分辨率
- android 扇形菜单实现,android扇形
- 最小二乘法 多项式曲线拟合 原理公式理解 Python 实现
- 【杭电4907】Task schedule
- JS自学|常用互动方法
- 约瑟夫问题
- 简单点,switch-case的结构简单点~ C语言学习(4)
- (20)HTML标签详解之<ul><ol><li><dl><dt><dd>
- 2016长乐夏令营 Day12
- 如何旋转recovery界面:恢复出厂设置界面和Fota升级界面
- NKOI 3732 wjj的01序列
- String类
- F5负载均衡设备的初识
- Unity资源路径及加载外部资源介绍
- 《Java困惑》:多并发情况下HashMap是否还会产生死循环
- SpringAOP配置事物
- 算法总结:【线段树+扫描线】&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828)
- MAC中PEP8的安装方法和使用
- Multiplication Table