题目链接:点击查看

题目大意:给出一个整数集合B,现在可以根据集合B构造一个无向图,规定所有的整数(无穷无尽)为顶点,若两个整数i和j满足abs(i - j)在集合B中,则 i 和 j 之间可以连一条边,现在问最少从集合B中删掉多少个元素,满足构成的图为一个二分图

题目分析:二分图的定义是不存在奇环,那么在这个题目中什么时候会出现奇环呢?因为顶点的范围是全部整数,最好想法的就是将奇数和偶数分开来,这样就是一张完美的二分图了,既然从奇偶出发,因为是牵扯到abs(i - j)与集合B的关系,所以我们首先需要知道:

  1. 奇数+奇数=偶数
  2. 奇数+偶数=奇数
  3. 偶数+偶数=偶数

如果我们想要将其分为奇偶两部分的话,显然必须令集合B中只剩下奇数才行,因为奇数和偶数作差只会出现奇数,因此刚好可以连边,而后考虑一下奇数和偶数都存在的情况,可以证明一定会存在奇环:

  • 假设奇数为x,偶数为y,则点0到点x*y一定有奇环:因为点0可以和点x建边,因为abs(x-0)=x,点x可以和点2*x建边,因为abs(2*x-x)=x,以此类推,点0到点x*y之间可以通过x传递建立y条边,点0到点x*y之间可以通过点y传递建立x条边,也就是由点0->点x*y->点0这个环中共有x+y条边,通过上面的前提我们可以得证,x+y是奇数,故一定存在奇环,证毕

若集合中有奇数有偶数是肯定不符合题意的,那么全部都是偶数的情况呢?因为如果集合中的数全是偶数,我们可以发现,所有的奇数和奇数连成了一个小集合,而所有的偶数和偶数也都连成了一个小集合,也就是说奇数和偶数互不干涉,所以我们需要想办法将其集合中的数转换为奇数的情况就能豁然开朗了,这里可以让集合B中所有的偶数同时除以2,直到出现至少一个奇数为止,这个操作该如何解释呢?因为现在已经是奇数点在一个集合中,偶数点在一个集合中了,我们可以对其重新编号,也就是让奇数所在的集合中等量出现奇数和偶数,偶数亦然,此时就相当于将整个集合的编号除以2了,同样集合B中的元素也需要对应除以2,根据题意保留的元素大概是这样的:

  1. 保留全部奇数
  2. 删除掉①中所有的奇数后,全部偶数除以2后,保留全部奇数
  3. 删除掉②中所有的奇数后,全部偶数除以2后,保留全部奇数
  4. 如此往复

到此为止,我们发现可以将所有的数按照二的幂次分成不同的集合中去,也就是说在题目给出的集合B中,我们可以选择任意一个二的幂次的集合进行保留,那么因为题目要求我们删除掉最少的元素,所以我们选择最大的那个集合保留即可

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=2e5+100;LL a[N];int num[N],cnt[100];int get_num(LL x)
{int ans=0;while(x%2==0){x>>=1;ans++;}return ans;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",a+i);num[i]=get_num(a[i]);cnt[num[i]]++;}int mmax=*max_element(cnt,cnt+100);printf("%d\n",n-mmax);for(int i=0;i<100;i++)if(mmax==cnt[i]){for(int j=1;j<=n;j++)if(num[j]!=i)printf("%lld ",a[j]);break;}return 0;
}

CodeForces - 1220D Alex and Julian(思维+数论)相关推荐

  1. Codeforces Round #586 (Div. 1 + Div. 2) D. Alex and Julian 数学 + 思维

    传送门 文章目录 题意: 思路: 题意: 给你一个无限个点的坐标轴,一个集合BBB,如果存在∣i−j∣=bk|i-j|=b_k∣i−j∣=bk​的话,那么i,ji,ji,j之间就连边.现在问你至少要从 ...

  2. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  3. E. Calendar Ambiguity(思维数论)

    E. Calendar Ambiguity(思维&数论) 思路:思维&数论. 考虑 i i i月 j j j日 = j =j =j月 i i i日. 即: { [ ( i − 1 ) ...

  4. Levko and Permutation CodeForces - 361B 思维 数论

    题意 对一个长度,最大值为n的排列 构造出其恰好有k个GCD(i,a[i])>1 的排列 n<=1e5; 分析 由于每个大于1的数与自己的gcd必然>1 所以构造大于1的gcd可以用 ...

  5. Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)

    Codeforces Beta Round #17 题目链接:点击我打开题目链接 大概题意: 给你 \(b\),\(n\),\(c\). 让你求:\((b)^{n-1}*(b-1)\%c\). \(2 ...

  6. CodeForces - 160D Edges in MST(思维+tarjan/树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的带权无向图,现在对于每条边来说,确定一下其分类: 一定是最小生成树上的边 可能是最小生成树上的边 一定不是最小生成树的边 题目分析:两种 ...

  7. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  8. Composite Coloring(思维 数论(筛素数 分解质因数))

    (29条消息) CodeForces - 1332B Composite Coloring(数论+构造)_Frozen_Guardian的博客-CSDN博客 (29条消息) codeforces 13 ...

  9. Codeforces 846 A Curriculum Vitae 思维 暴力

    题目链接: http://codeforces.com/contest/846/problem/A 题目描述: 给你一个串, 你可以做删除操作, 要求结果串0不能在1的右边, 问最多可以剩几个数字 解 ...

最新文章

  1. 关于局域网共享访问问题总结
  2. torch.full()简介
  3. 漫画算法:什么是一致性哈希?
  4. 11.20 java 方法
  5. 《第3选择》学习笔记
  6. C语言入门题-是不是太胖了 (10分)
  7. Spring Boot JPA中java 8 的应用
  8. android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
  9. 女士细线毛衣起多少针_从起针到缝合,教你织毛衣的各种要点(详细教程)
  10. Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题
  11. Solr7 安装部署 管理界面介绍 1
  12. 可用性目标概念化(摩西十戒)
  13. 简单描述构造方法和析构方法的区别
  14. Nerd的套现ATM机
  15. Windows远程访问Linux (Ubuntu)服务器
  16. 3801.最佳连续子数组-AcWing题库
  17. 心电图前波过多_如何读懂心电图危急值?
  18. 2020年中级数据库系统工程师考试时间表与考试大纲
  19. drop_last=True
  20. 研究生英语写译教程(提高级/第三版)_翻译篇 笔记及答案

热门文章

  1. 加减法叫做什么运算_小学四则运算基础知识,赶快给孩子存下吧!
  2. AQS.accquire
  3. webpack打包js文件
  4. es6语法-箭头函数
  5. 任务调度之Elastic-Job2
  6. log4j2 异步日志
  7. Topic交换器-搭建环境
  8. springboot No Java compiler available for configuration options compilerClassName
  9. MySQL常用存储引擎之MyISAM
  10. list lt t gt java_将DataTable转换成Listlt;Tgt;实现思路及示例代码