Codeforces 1220D 思维 数学 二分图基础
题意
我们有一个含多个正整数的集合B,然后我们将所有的整数,也就是Z集合内所有元素,都当做顶点
两个整数 \(i , j\) 能建立无向边,当且仅当 \(|i - j|\) 这个数属于B集合
要求我们从B中删去最少的数,来使得Z集合上建立的图为二分图
思路
首先要知道离散数学的基础知识,一个简单图是二分图,当且仅当其中没有奇环。
我们先假设B中只有一个数x,那么显然在Z中,0与x可以建边,然后x又可以和x * 2建边,以此类推。这是一条链
那么如果B中还有一个y呢,那显然还会生成一条链也就是 \(y * n(n \in N)\) 还会出现 \(nx + my\) 等,那环在哪呢,其实我们显然能知道的一个就是 \(0 - lcm(x, y) - 0\) : 0加上n个x之后到达\(lcm(x, y)\),然后减去m个y之后到达0.
1.我们可以发现,如果x,y一奇一偶的话,那么n和m必然一奇一偶,那么这个环就是奇环。所以,B中不能同时存在奇数与偶数
2.我们还能发现,如果x,y都是奇数,那么就不可能出现奇环,因为从一个奇数到达另一个奇数必然相差为偶数,而要凑够这个偶数,而且我们手里只有奇数,那就需要偶数个奇数,这样一来,环的长度只能是偶数
3.我们还能发现,如果把上面的 \(x,y\) 换成 \(nx,ny (n \in N)\),那么最终形成的图的形状是一样的。
前两个发现是很重要的,而第三个发现是将特殊情况扩展到一般情况的理论基础:
这样我们对于两个偶数x , y怎么判断有没有奇环?
我们不断地同时给x,y除以2,由发现3可知,操作后x,y形成的图形状不变。
那么最终x,y会变成“一奇一偶”或者”两个奇数“的情况,这样就可以判断了
这样我们就得到了性质4:x,y的质因子中,2的幂次相同的话,x,y就能变成”两个奇数“,不会形成奇环,反之则会
我们发现,性质4就是一般情况下的理论,囊括了对发现1 2 3的解释。我们可以马上根据性质4来写出代码,也就是计算B中每个数的2因子的幂次,分为m个集合,每个集合内元素的2因子的幂次相同,然后我们保留其中最大的那个集合,然后删除其他数字即可。
AC代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 200000;
int n;
long long bb[N + 5];
int col[N + 5] = {0};
vector<int> q2[105];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &bb[i]);
}
int mx = 0, mi = 0;
for (int i = 1; i <= n; ++i)
{
long long p = bb[i];
while (p % 2 == 0)
{
++col[i];
p /= 2;
}
q2[col[i]].push_back(i);
}
for (int i = 0; i <= 64; ++i)
{
if (q2[i].size() > mx)
{
mx = q2[i].size();
mi = i;
}
}
printf("%d\n", n - mx);
for (int i = 1; i <= n; ++i)
{
if (col[i] != mi)
{
printf("%lld ", bb[i]);
}
}
return 0;
}
Codeforces 1220D 思维 数学 二分图基础的更多相关文章
- [Codeforces 1178D]Prime Graph (思维+数学)
Codeforces 1178D (思维+数学) 题面 给出正整数n(不一定是质数),构造一个边数为质数的无向连通图(无自环重边),且图的每个节点的度数为质数 分析 我们先构造一个环,每个点的度数都是 ...
- 计算机思维的逻辑基础是什么? & 计算思维
l 计算机思维的逻辑基础: 计算机思维是指人们操作计算机时,计算机行使特定功能的运作方式. 逻辑基础则是指支撑事物运作的基本法则. 因而,计算机思维的逻辑基础可以理解为,计算机在行使特定功能时,其运 ...
- [codeforces Mail.Ru Cup 2018 Round 3][B Divide Candies ][思维+数学]
https://codeforces.com/contest/1056/problem/B 题意:输入n,m 求((a*a)+(b*b))%m==0的(a,b)种数(1<=a,b<= ...
- Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)
题目链接 题意: 1-m中,四个数凑成一组,满足任意2个数的gcd=k,求一个最小的m使得凑成n组解.并输出 分析: 直接粘一下两个很有意思的分析.. 分析1: 那我们就弄成每组数字都互质,然后全体乘 ...
- Divisors of Two Integers CodeForces - 1108B (数学+思维)
Recently you have received two positive integer numbers xx and yy. You forgot them, but you remember ...
- Codeforces Round #697 (Div. 3) F. Unusual Matrix (思维,数学)
题意:给你一个矩阵\(a\)和\(b\),你可以对\(a\)的任意一行或任意一列的所有元素xor\(1\)任意次,问最终是否能够得到\(b\). 题解:由\(a\ xor\ b=c\),可得:\(a\ ...
- Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad) D. Divide and Sum (思维,数学,逆元)
题意:有一个长度为\(2n\)数组,从中选分别选\(n\)个元素出来组成两个序列\(p\)和\(q\),(\(p\)和\(q\)中只要有任意一个元素在\(a\)的原位置不同,就算一个新的情况),选完后 ...
- Codeforces 1060E(思维+贡献法)
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...
随机推荐
- 四元数和旋转(Quaternion & rotation)
四元数和旋转(Quaternion & rotation) 本篇文章主要讲述3D空间中的旋转和四元数之间的关系.其中会涉及到矩阵.向量运算,旋转矩阵,四元数,旋转的四元数表示,四元数表示的旋转 ...
- TurtleBot3使用课程-第四节(北京智能佳)
目录 1.机器学习 2 1.1 机器学习一 2 1.1.1 目标 2 1.1.2 操作环境 2 1.1.3 设置 2 1.1.4运行(它需要超过几秒取决于PC) 3 1.1.5运行屏幕 3 1.1.6 ...
- windows中关闭端口的方法
打开cmd:输入-ano | findstr "端口号" 控制台会输出占用端口的pid 如"8380" 再向cmd中输入 taskkill /f/pid 838 ...
- 达梦数据库学习(一、linux操作系统安装及数据库安装)
达梦数据库学习(一.linux操作系统安装及数据库安装) 环境介绍: 使用VM12+中标麒麟V7.0操作系统+达梦8数据库 一.linux系统搭建 本部分没有需要着重介绍,注意安装时基本环境选择&qu ...
- DB2在渗透中的应用(转载)
原文地址:http://drops.wooyun.org/tips/16673 0x00 DB2简介 DB2是IBM公司推出关系型数据库管理系统. 现今DB2主要包含以下三个系列: DB2 for L ...
- Termux键盘配置
通过编辑~/.termux/termux.properties配置 extra-keys = [\ ['ESC', 'CTRL', '&', '$', '!', '%', '<', '& ...
- PHP将数据集转换成树状结构
/** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $l ...
- Angular入门到精通系列教程(10)- 指令(Directive)
1. 摘要 2. 组件与指令之间的关系 2.1. 指令的种类 3. Angular 中指令的用途 4. 指令举例 4.1. 指令功能 4.2. Anuglar CLI生成基本文件 4.3. Direc ...
- OSTU大津法图像分割
OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...
- Netty与NIO
初识Netty Netty是由JBoss提供的一个Java的开源框架,是GitHub上的独立项目. Netty是一个异步的,基于事件驱动的网络应用框架,用于快速开发高性能.高可靠的网络IO程序. Ne ...