CF922F Divisibility
2024-09-07 14:36:25
题目链接: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 ;
}
最新文章
- Using GET_APPLICATION_PROPERTY in Oracle D2k Forms
- 建立一个简单的SpringMVC程序
- C程序(3)
- ios 图片尺寸
- 【转】Android.mk文件语法规范(Android.mk File)
- Spring、基本类型属性和集合类型属性的注入
- 2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
- 如何去除AJAX收到数据中包含的html页面数据
- elisp
- iphone 4s页面引用jssdk无效
- angular之scope.$watch
- [树莓派(raspberry pi)] 01、在linux环境下给树莓派安装系统及入门各种资料
- luogu4643 [国家集训队]阿狸和桃子的游戏
- 队列 Queue 与 生产者消费模型
- blfs(systemv版本)学习笔记-编译安装配置dhcpcd
- js 稍微判断下浏览器 pc 还是手机
- Java -- JDBC 学习--调用函数&;存储过程
- C# 使用 iTextSharp 将 PDF 转换成 TXT 文本
- TensorFlow函数(三)tf.variable_scope() 和 tf.name_scope()
- jdbc 5.0
热门文章
- 监控MySQL服务及httpd服务
- 【杂谈】从实现角度看ChannelFuture
- SQL计算算数表达式的函数自定义(加减乘除)
- spark下dataframe转为rdd格式
- vue-cli创建的webpack工程中引用ExtractTextPlugin导致css背景图设置无效的解决方法
- Java 数组 之 二维数组
- 求x>0时,y=x^3-6x^2+15的极值
- 两种方法直接删除数组中特定值的项(JavaScript)
- 【Elasticsearch学习】之基础概念
- visibility: hidden 和 display: none的区别