hdu5014 构造b数列使得t最大(小想法)
题意:
给你一个序列a,他有n+1个数,每个数的范围是ai >= 0 && a[i] <= n,同时任意两个数字都是不相同的,就是ai != aj (i!=j),然后让你构造一个序列b,这个序列的要求与a序列一样,最后要求构造的b是使 t = (a0 ^ b0) + (a1 ^ b1) + ...+ (an ^ bn)最大。
思路:
一开始想的太简单了,因为题目要求的是每个数字都只能用一次,一开始我的想法是根据n的奇偶,来单独处理,处理的时候也是根据每个ai的奇偶来处理的,结果wa了,现在来说下正确的解法吧,这个题目我用的正确解法有点贪心的意思,我们每次先找到一个最大的2^k的数字,这个数字要小于等于n,从它开始枚举,往两边扩,如果不能扩了就找到当前没有被找出来的最大的那个2^k继续扩,不怎么好解释,自己在纸上多写几个连续的二进制数,然后模拟下很容易懂的,这里面有一个很容易让人怀疑的地方就是可能大数的那个方向会有剩余,其实不用担心这个,不可能有剩余,因为如果以某一个数为中心往两侧扩的话,只要前面扩到头了,也就是到1了,那么后面一定是mark完的了,因为扩到1相当于自己*2了,也就是2^(k+1)了,要是没有看懂什么意思,那么就自己找几个连续的二进制数模拟下就行了。
#include<stdio.h>
#include<string.h>
#include<stack> #define N 110000
using namespace std; int mark[N];
int num[N] ,Ans[N]; int main ()
{
int n ,i ,tmp;
while(~scanf("%d" ,&n))
{
for(i = 0 ;i <= n ;i ++)
scanf("%d" ,&num[i]);
stack<int>my_sk;
tmp = 1;
while(1)
{
my_sk.push(tmp);
tmp <<= 1;
if(tmp > n) break;
}
memset(mark ,0 ,sizeof(mark));
memset(Ans ,0 ,sizeof(Ans));
while(!my_sk.empty())
{
int L = my_sk.top() - 1;
int R = L + 1;
my_sk.pop();
while(1)
{
if(L < 0 || R > n || mark[L] || mark[R])
break;
mark[L] = mark[R] = 1;
Ans[L] = R ,Ans[R] = L;
L -- ,R ++;
}
}
__int64 ans = 0;
for(i = 0 ;i <= n ;i ++)
ans += (__int64)(num[i] ^ Ans[num[i]]);
printf("%I64d\n" ,ans);
for(i = 0 ;i <= n ;i ++)
if(i == n) printf("%d\n" ,Ans[num[i]]);
else printf("%d " ,Ans[num[i]]);
}
return 0;
}
hdu5014 构造b数列使得t最大(小想法)的更多相关文章
- hdu3006 状态压缩+位运算+hash(小想法题)
题意: 给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路: 是个小想法题目,要用到二进制压缩,位运算, ...
- 【bzoj5118】Fib数列2 费马小定理+矩阵乘法
题目描述 Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求Fib(2^n). 输入 本题有多组数据.第一行一个整数T,表示数据 ...
- [bzoj5118]Fib数列2_费马小定理_矩阵乘法
Fib数列2 bzoj-5118 题目大意:求Fib($2^n$). 注释:$1\le n\le 10^{15}$. 想法:开始一看觉得一定是道神题,多好的题面啊?结果...妈的,模数是质数,费马小定 ...
- Fib数列2 费马小定理+矩阵乘法
题解: 费马小定理 a^(p-1)=1(mod p) 这里推广到矩阵也是成立的 所以我们可以对(2^n)%(p-1) 然后矩阵乘法维护就好了 模数较大使用快速乘
- CodeForces 714E Sonya and Problem Wihtout a Legend(单调数列和DP的小研究)
题意:给你n个数字,每个数字可以加减任何数字,付出变化差值的代价,求最后整个序列是严格单调递增的最小的代价. 首先我们要将这个题目进行转化,因为严格单调下是无法用下面这个dp的方法的,因此我们转化成非 ...
- 两个有序数列找第k小
给定一个数组,数组中的数据无序,在一个数组中找出其第k个最小的数,例如对于数组x,x = {3,2,1,4,5,6},则其第2个最小的数为2 两个有序数组 找第k小 * 方案一 合并遍历 * 二:游 ...
- 关于APP自动化工程的一点小想法
首先谈一下APP自动化测试面临的一些局限性? 答:测试业务的不明确性,APP逻辑复杂,界面的跳转变化随时间变化. 测试本身的不确定性,如不定时弹窗问题. 测试环境不稳定性,主要是网络的稳定性. 测试接 ...
- 学习selenium python版最初的一个小想法
这个还是我在刚开始学习selenium的时候做的,自己觉得有点意思,在接下来我会基于目前我对于selenium的一些深入研究,写下我对selenium的理解以及UIAutomation的一些理解,以此 ...
- 对MySQL数据量日益增长产生的一点小想法
最近一直在想一个问题 MySQL数据量日益庞大,目前单表总记录数有 300W+,导致sql语句执行的速度变慢,如果一直这样增长下去,总有一天会爆炸的.怎么办??怎么办?? 第一:想到的必然是 添加索引 ...
随机推荐
- 翻译:《实用的Python编程》03_05_Main_module
目录 | 上一节 (3.4 模块) | 下一节 (3.6 设计讨论) 3.5 主模块 本节介绍主程序(主模块)的概念 主函数 在许多编程语言中,存在一个主函数或者主方法的概念. // c / c++ ...
- SpringCloud里面切换数据源无效的问题
问题描述: 调用链:controller1的接口A->service1的方法A->service2的方法B 方法A开启了事务,且指定了数据库A的数据源 方法B也开启了事务,使用了默认的事务 ...
- 如何使用excel制作查分系统
在工作学习中,我们经常会遇到使用excel制作查分系统这样的问题.培根说过:读书足以恬情,足以博采,足以长才.因此,面对使用excel制作查分系统我们应该有努力探索的精神.书到用时方恨少,事非经过不知 ...
- .NET 5学习笔记(11)—— Host Blazor WebAssembly in a Windows Service
实在是被某软忽悠瘸了,愤而写此一篇.希望能让同样需求的同学们少走弯路.某软在<在 Windows 服务中托管 ASP.NET Core>中,介绍了通过创建Worker Service工程, ...
- [LOJ 572] Misaka Network 与求和
一.题目 点此看题 二.解法 直接推柿子吧: \[\sum_{i=1}^n\sum_{j=1}^nf(\gcd(i,j))^k \] \[\sum_{d=1}^nf(d)^k\sum_{i=1}^{n ...
- 归一化(Normalization)和标准化(Standardization)
归一化和标准化是机器学习和深度学习中经常使用两种feature scaling的方式,这里主要讲述以下这两种feature scaling的方式如何计算,以及一般在什么情况下使用. 归一化的计算方式: ...
- CSS中的块级元素,行内元素,行内块元素
博客转载于:https://blog.csdn.net/swebin/article/details/90405950 块级元素 block 块级元素,该元素呈现块状,所以他有自己的宽度和高度,也就是 ...
- 【ZeyFraのJavaEE开发小知识05】Mybatis-Plus & Axios
关于如何在Mybatis-Plus中添加SQL拦截器 之前ZeyFra在MyBatis-Plus[踩坑记录01]一文中提到过,使用Mybatis-Plus时最好使用MybatisSqlSessionF ...
- [BFS]骑士旅行
骑士旅行 Description 在一个n m 格子的棋盘上,有一只国际象棋的骑士在棋盘的左下角 (1;1)(如图1),骑士只能根据象棋的规则进行移动,要么横向跳动一格纵向跳动两格,要么纵向跳动一格横 ...
- Win10环境下YOLO5 快速配置与测试
目录 一.更换官方源 二.安装Pytorch+CUDA(python版本) 三.YOLO V5 配置与验证 四.数据集测试 五.小结 不想看前面,可以直接跳到标题: 一.更换官方源 在 YOLO V5 ...