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边权的端点的边数 ...
随机推荐
- 利用PDF.JS插件解决了本地pdf文件在线浏览问题(根据需要隐藏下载功能,只保留打印功能)
我是在IE11和谷歌上做的测试,都可以显示,把做出的东西记录下来,方便大家还有自己学习! 可以在IIS7服务器上也可以下载Tomcat来做服务器 Tomcat下载地址 http://pan.bai ...
- Acyclic Organic Compounds
题意: 给一以1为根的字符树,给出每个节点的字符与权值,记 $diff_{x}$ 为从 $x$ 出发向下走,能走到多少不同的字符串,求问最大的$diff_{x} + c_{x}$,并求有多少个 $di ...
- Asset Catalog Help (三)---Adding Image Sets
Adding Image Sets Organize versions of your images in image sets, which you can add to an asset cata ...
- Qt Creator Theme FlatDark 配色
1.预处理指令,宏定义 颜色 #FF6AAD 2.普通代码 颜色 #D6CF9A 3.头文件 #D69545 4.系统限定符(namespace, class, public, typedef等) ...
- UVaLive 3983 Robotruck (DP + 单调队列)
题意:有n个垃圾,第i个垃圾坐标为(xi,yi),重量为wi,有一个机器人,要按照编号从小到大的顺序剑气所有的垃圾兵扔进垃圾桶,垃圾桶在原点, 每次总重量不能超过C,两点间距离为曼哈顿距离,求出最短的 ...
- hdu1848(sg函数打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: #include <iostrea ...
- 跳转到另一个APP
看看这个代码: http://code4app.com/codesample/4fcc512d6803fae60b000002 inApp跳转,不过需要Nimbus类库. 要跳转到另一个APP,需要另 ...
- (十四)SpringBoot开发微信授权支付
前提:配置好域名,在公众号配置 一.引用jar包,在pom.xml文件加入依赖 <dependency> <groupId>com.github.binarywang</ ...
- 【MySQL】全量+增量的备份/恢复
生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...
- RN初始化项目报错
解决方法:全局删除yarn