Codeforces 274A k-Multiple Free Set
2015-09-04 17:29
381 查看
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 test(s)
input
output
Note
In the sample input one of the possible maximum 2-multiple free subsets is {4, 5, 6}.
解题思路:思路很简单,找出所有分组,且每个分组内的数从小到大排序满足前一个数的k倍为后一个数,然后根据这些分组的大小求解最终的结果,分奇数情况和偶数情况两种方法进行讨论。
代码实现由细节的方面,对k=1时,处理需要特别注意容易造成死循环。
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 test(s)
input
6 2 2 3 6 5 4 10
output
3
Note
In the sample input one of the possible maximum 2-multiple free subsets is {4, 5, 6}.
解题思路:思路很简单,找出所有分组,且每个分组内的数从小到大排序满足前一个数的k倍为后一个数,然后根据这些分组的大小求解最终的结果,分奇数情况和偶数情况两种方法进行讨论。
代码实现由细节的方面,对k=1时,处理需要特别注意容易造成死循环。
#include <ctime> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <string> #include <vector> #include <map> #include <algorithm> using namespace std; const int maxn = 100010; typedef long long ll; map<ll, int> myMap; ll arr[maxn]; bool mark[maxn]; int main() { //freopen("aa.in", "r", stdin); int n, k, ans = 0; scanf("%d %d", &n, &k); memset(mark, false, sizeof(mark)); for(int i = 1; i <= n; ++i) { scanf("%I64d", &arr[i]); } sort(arr + 1, arr + n + 1); for(int i = 1; i <= n; ++i) { myMap[arr[i]] = i; } for(int i = 1; i <= n; ++i) { if(!mark[i]) { ll x = arr[i]; int ts = 0; // 此处需要添加 !mark[myMap[x]] 这样一个判断条件 // 从而避免k=1时造成的死循环 while(myMap.find(x) != myMap.end() && !mark[myMap[x]]) { ts++; mark[myMap[x]] = true; x = x * k; } ans += (ts/2) + (ts%2); } } printf("%d\n", ans); return 0; }
相关文章推荐
- 二叉树遍历-----前序后序迭代遍历的新思路
- 搭建Spring + SpringMVC + Mybatis框架之二(整合Spring和Mybatis)
- python发邮件
- 提高
- python的注释
- 内省和BeanUtils框架
- 在window server 2008 64位系统上 发布asp.net网站的过程中遇到的问题
- 一台数控恒流恒压电源的制作
- hdoj2588GCD【欧拉函数】
- android开发过程中的tips
- poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)
- HTTP协议概要
- python setattr(),getattr()函数
- python调试技术之性能优化
- iphone开发之UIImagePickerController组件的预习————用于照相和打开图库
- RAM与flash,以及NAND flash与NOR flash的区别
- HDU 4597 Play Game
- python调试技术之内存泄露
- XML解析之jdom解析
- QT工程pro文件TEMPLATE变量说明