C. Anu Has a Function(位运算思维)
题目
思路:对于两个二进制数f(x,y)=x|y-y 举两个例子 x 11101 y 10100 f(x,y)=01001 x 111111 y 1010 f(x,y)=110101 我们可以发现f(x,y)结果就是将y中的对应二进制为一的地方如果x中相对应的也为1则将x相应位置变为0,剩下的x就是结果。而对于一个序列我们将对序列第一个元素进行(n-1)次这种“相减”运算,可以发现对于一个序列我们只要确定了第一个元素的值,其他后面的元素无论怎样排序结果都相同。如此我们只需先将每个元素所有位的二进制数存储一遍求个总和,如果存储的某位上>=2,则必有两个元素都有在这个位上是1,最终结果在此位上会相减为0。所以只有某个位是1,才能够保存下来,那么我们只需找到存储中最大的位上是1的元素即可(由二进制的性质所有后面的位数相加的值不可能比前面的大),细节见代码。
Code:
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<bitset>
#define pii pair<int,int>
#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const int Max = 1e6 + 5;
int lst[Max];
int Mod = 1e9 + 7;int main()
{FAST;int n;cin >> n;map<int, int> ma;for (int i = 1;i <= n;i++){int g, t = 0;cin >> g;lst[i] = g;while (g){if (g % 2)ma[t]++;g /= 2;t++;}}int f = -1;for (int i = 35;i >= 0;i--)if (ma[i] == 1) {f = i;break;}if (f == -1)for (int i = 1;i <= n;i++)cout << lst[i] << " ";else{int q=0;for (int i = 1;i <= n;i++){int g = lst[i], t = 0;while (g){if (g % 2==1 && t == f){q = i;break;}g /= 2;t++;}if (q)break;}int k = lst[1];lst[1] = lst[q];lst[q] = k;for (int i = 1;i <= n;i++)cout << lst[i] << " ";}cout << endl;
}
C. Anu Has a Function(位运算思维)相关推荐
- Anu Has a Function——位运算
首先,第一行献给我痛苦的两个小时调试 题意:排序数组,使得f(f(-f(f(a1,a2),a3),-an−1),an)f(f(-f(f(a1,a2),a3),-an−1),an) f(f(-f(f(a ...
- 贪心 ---- C. Anu Has a Function位运算+贪心证明
题目链接 有一种操作f(x,y)=(x∣y)−yf(x,y)=(x|y)−yf(x,y)=(x∣y)−y,给你一个序列a1,a2,...,an.a1,a2,...,an.a1,a2,...,an. 让 ...
- C .Adding Powers codeforces(位运算思维)
outputstandard output Suppose you are performing the following algorithm. There is an array v1,v2,-, ...
- Anu Has a Function CodeForces - 1300C(二进制位运算)
Anu has created her own function ff: f(x,y)=(x|y)−yf(x,y)=(x|y)−y where || denotes the bitwise OR op ...
- XOR-gun (位运算,思维,区间暴力)
XOR-gun (位运算,思维,区间暴力) 题面翻译 给定一个长为 2≤n≤1052\leq n \leq10^52≤n≤105 的不降序列,每次操作可以任选相邻的两个数,并将这两个数替换为两个数按位 ...
- Codeforces #618 div.2 C. Anu Has a Function
C. Anu Has a Function time limit per test1 second memory limit per test256 megabytes inputstandard i ...
- AC. Anu Has a Function
A&C. Anu Has a Function Codeforces Round #618 (Div. 1&2) 题目链接 关键词 greedy math *1500 位运算 解题思路 ...
- Codeforces Round #618 (Div. 1)-----A. Anu Has a Function
提示: Codeforces Round #618 (Div. 1)-----A. Anu Has a Function 题意: 定义一个函数f(x , y) = f(x | y) - y 给定一个长 ...
- C++学习笔记-----用位运算实现加减乘除
C++学习笔记-----用位运算实现加减乘除 原文:http://blog.csdn.net/sinat_35261315/article/details/72904945 数据在计算机内存中是以二进 ...
最新文章
- 基于linux智能家居系统设计,基于Linux的智能家居的设计(2)
- SpringBoot_web开发-引入thymeleaf
- SQL2008使用json.net实现XML与JSON互转
- [Redis6]新数据类型_Geospatial
- 时间管理—如何充分利用你的24小时
- 在.NET环境禁止别人调用代码
- CSDN Markdown编辑器帮助文档
- HDU-4292-Food(最大流匹配问题)
- iMazing2注册机如何备份苹果手机的通话记录?
- Axure第11享:Axure汉化方法?
- CAN报文解析—案例
- Symantec的SEP服务器(SEPM)从12.1 RU6MP5 升级到14 MP1 操作手册
- 《读书的力量》读后感作文4000字
- 读《创业36条军规》(三)学先进 傍大款 走正道
- 手机 SMS PDU 格式参考手册
- 【Python】Pandas读取tsv文件
- 蒲公英服务器搭建小程序,uniapp 小程序打包发布
- 基于SPI协议的Flash驱动控制-数据普通读操作
- 菊风云 | 音视频社交崛起的背后
- anaconda python3.6版本_Anaconda Python V3.6 官方版