题目链接:http://codeforces.com/contest/922/problem/F

题目大意:

  对于一个数集 \(I\),定义 \(f(I)\) 为 \(I\) 中满足条件的数对\((a,b)\)的个数:\(a<b\) 并且 \(a|b\).

  要求构造一个数集 \(I\),数集中元素大于 \(0\) 小于等于 \(n\),并且 \(f(I) = k\).

知识点:  构造

解题思路:

  用一种类似素数筛的方法计算每个数的真因子的个数,顺便把个数累加起来,一旦发现大于等于\(k\)即可停止,我们用这些数来构造即可。当然,如果发现 \(1\) 到 \(n\) 所有的真因子个数加起来都小于 \(k\),直接输出 "\(No\)".

  接下来根据真因子个数从大到小排序,如果找到一个 \(x\) 满足:\(x > m/2\) 并且目前的 \(f( )\) 值减掉这个数真因子数大于或等于 \(k\),就在数集中去除这个数并且更新 \(f()\) 值(因为对于大于 \(m/2\) 的数,它对于答案的贡献便是其真因子数),直到满足 \(f(I) = k\) 即可。(具体证明参考官方题解

AC代码:

 #include <bits/stdc++.h>

 using namespace std;

 typedef long long ll;
typedef pair<ll,int> P;
const int maxn = 3e5+;
P have[maxn];
bool cut[maxn];
bool cmp(const P &a,const P &b){
return a.first>b.first;
}
int main(){
int n;
ll k,cnt=;
scanf("%d%lld",&n,&k);
for(int i=;i<=n;i++) have[i].first=,have[i].second=i;
int m;
for(m=;m<=n;m++){
for(int j=m*;j<=n;j+=m) have[j].first++;
cnt+=have[m].first; if(cnt>=k) break;
}
if(cnt<k) return *printf("No\n");
sort(have+,have+m,cmp);
int temp=m;
for(int i=;i<=m;i++){
if(have[i].second>m/&&cnt-have[i].first>=k){
cnt-=have[i].first;
cut[have[i].second]=true;
temp--;
}
if(cnt==k) break;
}
printf("Yes\n");
printf("%d\n",temp);
for(int i=;i<=m;i++){
if(!cut[i]) printf("%d ",i);
}
printf("\n");
return ;
}

最新文章

  1. Using GET_APPLICATION_PROPERTY in Oracle D2k Forms
  2. 建立一个简单的SpringMVC程序
  3. C程序(3)
  4. ios 图片尺寸
  5. 【转】Android.mk文件语法规范(Android.mk File)
  6. Spring、基本类型属性和集合类型属性的注入
  7. 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
  8. 如何去除AJAX收到数据中包含的html页面数据
  9. elisp
  10. iphone 4s页面引用jssdk无效
  11. angular之scope.$watch
  12. [树莓派(raspberry pi)] 01、在linux环境下给树莓派安装系统及入门各种资料
  13. luogu4643 [国家集训队]阿狸和桃子的游戏
  14. 队列 Queue 与 生产者消费模型
  15. blfs(systemv版本)学习笔记-编译安装配置dhcpcd
  16. js 稍微判断下浏览器 pc 还是手机
  17. Java -- JDBC 学习--调用函数&amp;存储过程
  18. C# 使用 iTextSharp 将 PDF 转换成 TXT 文本
  19. TensorFlow函数(三)tf.variable_scope() 和 tf.name_scope()
  20. jdbc 5.0

热门文章

  1. 监控MySQL服务及httpd服务
  2. 【杂谈】从实现角度看ChannelFuture
  3. SQL计算算数表达式的函数自定义(加减乘除)
  4. spark下dataframe转为rdd格式
  5. vue-cli创建的webpack工程中引用ExtractTextPlugin导致css背景图设置无效的解决方法
  6. Java 数组 之 二维数组
  7. 求x>0时,y=x^3-6x^2+15的极值
  8. 两种方法直接删除数组中特定值的项(JavaScript)
  9. 【Elasticsearch学习】之基础概念
  10. visibility: hidden 和 display: none的区别