题目相当于问1-n中最多能选出多少对不互素无交集的二元组,并要求方案
构造:将所有数放入其最小质因子对应的集合,若素数p所对应的集合元素个数为奇数且$p\ne 2$且$2p\le n$,那么就将$2p$从2对应的集合移到p对应的集合,最终每一个集合中选择$\frac{|S|}{2}$(下取整)对即可
关于这一构造的正确性证明:
1.合法性:素数p所对应的集合中的每一个元素都有公素因子p,因此两两不互素;同时每一个数最多只存在于一个集合,因此不会重复
2.最优性:首先对于$2p>n$的素数p和1都无法参与答案,那么剩余元素的最小质因子一定在$[2,\frac{n}{2}]$中,而通过构造中的调整一定可以使得$(2,\frac{n}{2}]$中的集合元素个数都为偶数,因此最多剩下1个数,不存在更多的匹配

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 vector<int>v,ans[N];
5 int E,t,n,p[N],mn[N],vis[N],bl[N];
6 int main(){
7 for(int i=2;i<N-4;i++){
8 if (!vis[i]){
9 p[++p[0]]=i;
10 mn[i]=i;
11 }
12 for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){
13 vis[i*p[j]]=1;
14 mn[i*p[j]]=p[j];
15 if (i%p[j]==0)break;
16 }
17 }
18 scanf("%d",&t);
19 while (t--){
20 scanf("%d",&n);
21 for(int i=1;i<=n;i++)vis[i]=0;
22 for(int i=2;i<=n;i++){
23 vis[mn[i]]++;
24 bl[i]=mn[i];
25 }
26 for(int i=1;(i<=p[0])&&(p[i]<=n);i++)
27 if ((vis[p[i]]&1)&&(p[i]<=n/2))bl[2*p[i]]=p[i];
28 for(int i=1;i<=n;i++)ans[i].clear();
29 for(int i=2;i<=n;i++)ans[bl[i]].push_back(i);
30 int sum=0;
31 for(int i=2;i<=n;i++)sum+=ans[i].size()/2;
32 printf("%d\n",sum);
33 for(int i=1;(i<=p[0])&&(p[i]<=n);i++)
34 for(int j=0;j+1<ans[p[i]].size();j+=2)printf("%d %d\n",ans[p[i]][j],ans[p[i]][j+1]);
35 }
36 }
 

[nowcoder5669H]Harder Gcd Problem的更多相关文章

  1. 【算法系列学习】codeforces C. Mike and gcd problem

    C. Mike and gcd problem http://www.cnblogs.com/BBBob/p/6746721.html #include<iostream> #includ ...

  2. CF798 C. Mike and gcd problem

    /* CF798 C. Mike and gcd problem http://codeforces.com/contest/798/problem/C 数论 贪心 题意:如果一个数列的gcd值大于1 ...

  3. Codeforces Round #410 (Div. 2)C. Mike and gcd problem

    题目连接:http://codeforces.com/contest/798/problem/C C. Mike and gcd problem time limit per test 2 secon ...

  4. codeforces#410C Mike and gcd problem

    题目:Mike and gcd problem 题意:给一个序列a1到an ,如果gcd(a1,a2,...an)≠1,给一种操作,可以使ai和ai+1分别变为(ai+ai+1)和(ai-ai+1); ...

  5. Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1

    C. Mike and gcd problem time limit per test: 2 seconds memory limit per test: 256 megabytes input: s ...

  6. #410div2C. Mike and gcd problem

    C. Mike and gcd problem time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. Codeforces 798C - Mike and gcd problem(贪心+数论)

    题目链接:http://codeforces.com/problemset/problem/798/C 题意:给你n个数,a1,a2,....an.要使得gcd(a1,a2,....an)>1, ...

  8. FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2224 同hdu5869 //#pragma comment(linker, "/STACK:1024 ...

  9. 【codeforces 798C】Mike and gcd problem

    [题目链接]:http://codeforces.com/contest/798/problem/C [题意] 给你n个数字; 要求你进行若干次操作; 每次操作对第i和第i+1个位置的数字进行; 将 ...

随机推荐

  1. SphereEx 创始人张亮云咖访谈回顾:构建数据服务的新思路

    2021 年 7 月 21 日,2021 亚马逊云科技中国峰会在上海盛大开幕.本次大会以"构建新格局,共赢云时代"为主题,邀请到来自技术社区.开源软件基金会.开源创业代表.女性开发 ...

  2. bzoj1858SCOI 序列操作 (线段树)

    题目大意: 给定一个长度为n的01序列为,现在有m种操作 \(0\ a\ b\) 把\([a,b]\)的数全部修改为0 \(1\ a\ b\) 把\([a,b]\)的数全部修改为1 \(2\ a\ b ...

  3. SpringBoot-MVC自动配置原理

    SpringBoot对SpringMVC做了哪些配置,如何扩展,如何定制? 文档地址 :https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/re ...

  4. springcloud整合config组件

    config组件 config组件支持两种配置文件获取方式springcould搭建的微服务的配置文件的获取方式有两种.它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中或者本地 ...

  5. spring提供的可拓展接口

    接口:SmartLifecycle(https://www.jianshu.com/p/7b8f2a97c8f5)

  6. 初学python-day4 字典(已更新完)

  7. JavaScript05

    显示和隐藏 元素的显示和隐藏 元素display属性可控制元素的显示和隐藏,先获取元素对象,再通过点语法调用style对象中的display属性 语法格式: 元素.style.display='non ...

  8. 【STM32学习笔记】USART 硬件流控

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

  9. 算法:数字推盘游戏--重排九宫(8-puzzle)

    一.数字推盘游戏 数字推盘游戏(n-puzzle)是一种最早的滑块类游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等.也有以图画代替数字的推盘游戏.可能Noyes Palmer Chapman在1 ...

  10. 验证人员应该以何种角度阅读spec

    转载:验证人员应该以何种角度阅读spec - 微波EDA网 (mweda.com) 在开发流程中,设计和验证人员关注的点肯定是不一样的,尤其在spec的理解上,验证人员往往需要有自己独立的理解.在拿到 ...