triples I(按位或运算及3的特性)(2019牛客暑期多校训练营(第四场)D)
示例1:
输入:
2
3
7
输出:
1 3
2 3 6
说明:3=3, (3|6)=7
题意:输出尽可能少的数字,他们的按位或结果为输入的数字a。
题解:(表示看不懂题解,看山东大佬的代码看懂的)首先:有两个奇怪的现象,就是一个数字的二进制(我的定义是第一位为0,即偶数)有且只有2个1,且分别在奇数位和偶数位上时,这个数一定是3的倍数。如果一个数字a(a>3)在奇数位和偶数位都有1,且1的数量都大于等于1,当a%3==1时,只有拿走一个偶数位上的1即可%3==0;当a%3==2时,只有拿走一个奇数位上的1即可%3==0。
1、如果输入的a是3的倍数,则直接输出a;
2、如果输入的a不是3的倍数,记录这个数的二进制在奇数位和偶数位上1的个数和位置,然后进行下面操作:
如果在奇数位和偶数位都存在1,则构造num1=0,num2=a,然后如果a%3==1,则将num2偶数位上的一个1拿走,给num1奇数位和偶数位各一个已存在的1;如果a%3==2,则将num2奇数位上的一个1拿走,给num1奇数位和偶数位各一个已存在的1;
如果只在奇数位或偶数位上存在1,同样构造num1=0,num2=a,逐步拿走num2上的1和给num1已存在的1,直至num2%3==0,num2停止拿走1,num1继续得到已存在的1,直到num1%3=0结束,完成构造。
AC代码:
#include<bits/stdc++.h>
#define LL long long
#define pb push_back
using namespace std;
LL num1,num2;
void solve(LL x)
{
num1=,num2=x;
vector<int>odd,even;
for(int i=;i<=;i++){//将奇数位和偶数位上的1的位置取出并保存
if((x>>i)&){
if(i%)odd.pb(i);
else even.pb(i);
}
}
if(odd.size()&&even.size()){//奇数位和偶数位上都存在1的情况
if(x%==){
num2^=(1LL<<even[]);
num1^=(1LL<<even[]);
num1^=(1LL<<odd[]);
}
else{
num2^=(1LL<<odd[]);
num1^=(1LL<<even[]);
num1^=(1LL<<odd[]);
}
}
else if(odd.size()){//只有奇数位上存在1的情况
int i;
for(i=;i<odd.size();i++){
num1^=(1LL<<odd[i]),num2^=(1LL<<odd[i]);
if(num2%==){
i++;break;
}
}
for(;i<odd.size();i++){
if(num1%==)break;
num1^=(1LL<<odd[i]);
}
}
else{//只有偶数位上存在1的情况
int i;
for(i=;i<even.size();i++){
num1^=(1LL<<even[i]),num2^=(1LL<<even[i]);
if(num2%==){
i++;break;
}
}
for(;i<even.size();i++){
if(num1%==)break;
num1^=(1LL<<even[i]);
}
}
}
int main()
{
LL t,n;
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
vector<LL>num;
if(n%==){
num.pb(n);
}
else {
solve(n);//a%3!=0的情况下进行构造。
num.pb(num1);num.pb(num2);
}
if(num.size()==)
printf("1 %lld\n",num[]);
else if(num.size()==)
printf("2 %lld %lld\n",num[],num[]);
}
return ;
}
triples I(按位或运算及3的特性)(2019牛客暑期多校训练营(第四场)D)的更多相关文章
- 牛客网多校赛第七场--C Bit Compression【位运算】【暴力】
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...
- 牛客网多校赛第七场A--Minimum Cost Perfect Matching【位运算】【规律】
链接:https://www.nowcoder.com/acm/contest/145/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 2019牛客多校四 E. triples II (容斥)
大意: 给定$n,a$, 求$n$个$3$的倍数, $or$和为$a$的方案数. 简单容斥题 可以求出$f_{x,y}$表示所有$3$的倍数中, 奇数位不超过$x$个$1$, 偶数位不超过$y$个$1 ...
- 牛客编程巅峰赛S2第10场 - 钻石&王者 C.牛牛的路径和 (位运算,dfs)
题意:给你节点数为\(n\)的树,每个节点都有自己的权值,求所有路径的上的点的权值按位与的和. 题解:题目给的数据很大,我们不能直接去找.因此我们可以枚举二进制\([1,20]\)的每一位,然后再枚举 ...
- Codeforces Round #344 (Div. 2)(按位或运算)
Blake is a CEO of a large company called "Blake Technologies". He loves his company very m ...
- 出题人的女装(牛客练习赛38题B) (概率+分式运算)
链接:https://ac.nowcoder.com/acm/contest/358/B来源:牛客网 出题人的女装 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...
- 牛客练习赛 23 C 托米的位运算
链接:https://www.nowcoder.com/acm/contest/156/C来源:牛客网 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 n 个自然 ...
- 加法运算替代 牛客网 程序员面试金典 C++ Python
加法运算替代 牛客网 程序员面试金典 题目描述 请编写一个方法,实现整数的乘法.减法和除法运算(这里的除指整除).只允许使用加号. 给定两个正整数int a,int b,同时给定一个int type代 ...
- Swift学习笔记 - 位移枚举的按位或运算
在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...
随机推荐
- 简要介绍 X Window System (又称为X11 or X)
X11是一个应用程序,而不是一个操作系统,主要功能是提供图形界面,实现架构和网络架构相同,有X Client和X Server组件,另外还有Window Manager和Display Manager ...
- Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks
Social GAN: Socially Acceptable Trajectories with Generative Adversarial Networks 2019-06-01 09:52:4 ...
- python学习导图
- java输出一个目录下的子目录
java输出一个目录下的子目录 package com.vfsd.core; import java.io.File; public class ListDir { public static voi ...
- Qt编写自定义控件69-代码行数统计
一.前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行.注释行.代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计.写完这个工具第一件事情就 ...
- CentOS7下搭建Redis主从复制
(1).实验环境 youxi1 192.168.1.6 Master服务器 youxi2 192.168.1.7 Slave服务器 (2).实验 1)两台服务器上yum安装Redis,启动并设置开机自 ...
- spring 通过注解装配Bean
使用注解的方式可以减少XML的配置,注解功能更为强大,它既能实现XML的功能,也提供了自动装配的功能,采用了自动装配后,程序员所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发 ...
- DELPHI 数据库操作类(工具类)
DELPHI 数据库连接类 做的时候目地是可以通过类的创建和释放进行数据库的短连接,在做服务端的时候每一个请求都通过类生成一个数据连接 unit UnDm; interface uses SysUti ...
- 一个命令永久禁用Win10驱动程序强制签名
https://blog.csdn.net/xiaodingqq/article/details/80093888
- 【超分辨率】—(ESRGAN)增强型超分辨率生成对抗网络-解读与实现
一.文献解读 我们知道GAN 在图像修复时更容易得到符合视觉上效果更好的图像,今天要介绍的这篇文章——ESRGAN: Enhanced Super-Resolution Generative Adve ...