codevs 1553 互斥的数
有这样的一个集合,集合中的元素个数由给定的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
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int s[];
map<int,bool>d;
int main()
{
int h,n,p;
cin>>n>>p;
h=;
for(int i=;i<=n;++i)
cin>>s[i];
sort(s+,s++n);
for(int i=;i<=n;++i)
{
if(!d[s[i]])
{
d[s[i]*p]=;
h++;
}
}
cout<<h;
}
哈希 做法 21ms 876KB 1213B
#include <algorithm>
#include <cstdio> using namespace std; struct node
{
int to,next,cs;
bool vis;
}edge[];
int head[],n,p,a[],tot;
int qr()
{
int x=,f=;
char ch=getchar();
while(ch>''||ch<''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+(int)ch-;ch=getchar();}
return x*f;
}
int get_hash1(int k)
{
return k*%;
}
int get_hash2(int k)
{
return k*%;
}
void add(int from,int to)
{
tot++;
edge[tot].next=head[from];
edge[tot].to=to;
head[from]=tot;
}
void change(int u,int v)
{
for(int j=head[u];j;j=edge[j].next)
{
if(edge[j].to==v)
{
edge[j].vis=;
}
}
}
int pd(int u,int v)
{
for(int k=head[u];k;k=edge[k].next)
{
if(edge[k].to==v&&edge[k].vis==)
return true;
}
return false;
}
int main()
{
n=qr();
p=qr();
for(int i=;i<n;++i)
{
a[i]=qr();
int x=get_hash1(a[i]);
int y=get_hash2(a[i]);
add(x,y);
}
sort(a,a+n);
int h=,ans=n;
for(int i=;i<n;++i)
{
int x=get_hash1(a[i]),y=get_hash2(a[i]);
if(pd(x,y))
{
int t=a[i]*p;
int x=get_hash1(t),y=get_hash2(t);
change(x,y);
h++;
}
}
printf("%d\n",h);
return ;
}
codevs 1553 互斥的数的更多相关文章
- codevs——1553 互斥的数
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同 ...
- Codevs No.1553 互斥的数
2016-05-31 21:34:15 题目链接: 互斥的数 (Codevs No.1553) 题目大意: 给N个数,如果其中两个数满足一个数是另一个的P倍,则称它俩互斥,求一个不互斥集合的最大容量 ...
- 【wikioi】1553 互斥的数(hash+set)
http://wikioi.com/problem/1553/ 一开始我也知道用set来判a[i]/p是否在集合中,在的话就直接删掉. 但是我没有想到要排序,也没有想到当存在a,b使得a/p==b时到 ...
- codevs1553 互斥的数
1553 互斥的数
- 互斥的数(hash)
1553 互斥的数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定, ...
- 互斥的数(codevs 1553)
题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y满足y = P*x,那么就认为x,y这两个数是互斥的,现在想知 ...
- codevs 1166 矩阵取数游戏
二次联通门 : codevs 1166 矩阵取数游戏 /* codevs 1166 矩阵取数游戏 SB区间dp dp[l][r] = max (dp[l + 1][r] + number[l], dp ...
- T1553 互斥的数 codevs
http://codevs.cn/problem/1553/ 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数,一旦集合中的两个数x,y ...
- 【CodeVS 1037】取数游戏
http://codevs.cn/problem/1037/ Alice必胜是Alice将硬币移向边权为0的一端并且把经过的边变为0,让BoB无路可走. 这样只要起点到两个方向最近的0边权的端点的边数 ...
随机推荐
- 屏蔽iframe中超链接
<style type="text/css"> .mask { position: absolute; width: 290px; height: 96px; z-in ...
- cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示
今天遇到一个问题: 一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在. 在脚本最上方,程序如下: #!/usr/local/bin p ...
- B - Equidistant String
B - Equidistant String Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & % ...
- PHP实用小程序(三)
<HTML> <HEAD> <TITLE>给数组增加元素</TITLE> </HEAD> <? $Cities[] = "& ...
- Linux 静态库 & 动态库
转自:http://blog.chinaunix.net/uid-26833883-id-3219335.html 一.什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执 ...
- E20190407-hm
conclude vt. 推断; 结束,终止; 议定; vi. 终了; 作出决定或达成协议; interjection n. 叹词,感叹词; definitely adv. 明确地; 确切地; ...
- layui 关闭当前窗口,刷新父级页面
关闭当前窗口 layer.close(layer.index); 刷新页面 window.parent.location.reload();
- Aandroid 解决apk打包过程中出现的“Certificate for <jcenter.bintray.com> doesn't match any of the subject alternative names: [*.aktana.com, aktana.com]”的问题
有时候,apk打包过程中会出现“Certificate for <jcenter.bintray.com> doesn't match any of the subject alterna ...
- JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试
本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...
- 抛出异常-throws和throw
package com.mpp.test; import java.util.Scanner; public class TryDemoFour { public static void main(S ...