当前位置: 首页 > wzjs >正文

网站页面确认书宁波seo网络推广推荐

网站页面确认书,宁波seo网络推广推荐,提供域名申请的网站,WordPress装好题目描述 有 N N N 种食材,编号从 0 0 0 至 N − 1 N-1 N−1,其中第 i i i 种食材的美味度为 a i a_i ai​。 不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为 x x x 和 y y y ,那么它们…

题目描述

N N N 种食材,编号从 0 0 0 N − 1 N-1 N1,其中第 i i i 种食材的美味度为 a i a_i ai

不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为 x x x y y y ,那么它们的契合度为 $x\ \text{and}\ y $。

其中, and \text{and} and 运算为按位与运算,需要先将两个运算数转换为二进制,然后在高位补足 ,再逐位进行与运算。例如, 12 12 12 6 6 6 的二进制表示分别为 1100 1100 1100 0110 0110 0110 ,将它们逐位进行与运算,得到 0100 0100 0100 ,转换为十进制得到 4,因此 12 and  6 = 4 12 \text{ and } 6 = 4 12 and 6=4在 C++ 或 Python 中,可以直接使用 & 运算符表示与运算。

现在,请你找到契合度最高的两种食材,并输出它们的契合度。

输入格式

第一行一个整数 N N N,表示食材的种数。

接下来一行 N N N 个用空格隔开的整数,依次为 a 1 , ⋯ , a N a_1,\cdots,a_N a1,,aN,表示各种食材的美味度。

输出格式

输出一行一个整数,表示最高的契合度。

输入输出样例 #1

输入 #1

3
1 2 3

输出 #1

2

输入输出样例 #2

输入 #2

5
5 6 2 10 13

输出 #2

8

说明/提示

样例解释 1

可以编号为 1 , 2 1,2 1,2 的食材之间的契合度为 2 and  3 = 2 2\ \text{and} \ 3=2 2 and 3=2,是所有食材两两之间最高的契合度。

样例解释 2

可以编号为 3 , 4 3,4 3,4 的食材之间的契合度为 10 and  13 = 8 10\ \text{and}\ 13=8 10 and 13=8,是所有食材两两之间最高的契合度。

数据范围

对于 40 % 40\% 40% 的测试点,保证 N ≤ 1 , 000 N \le 1,000 N1,000

对于所有测试点,保证 N ≤ 10 6 N \le 10^6 N106 0 ≤ a i ≤ 2 , 147 , 483 , 647 0\le a_i \le 2,147,483,647 0ai2,147,483,647

提交链接

烹饪问题

思路分析

对于 40 % 40\% 40% 的测试点:

暴力算法( 100 % 100\% 100% 的数据会超时)

枚举所有 ( i , j ) (i, j) (i,j) 组合,复杂度 O ( N 2 ) O(N^2) O(N2),在 n = 10 6 n=10^6 n=106 时会超时

#include <bits/stdc++.h>
using namespace std;int n, a[1000009];int main()
{cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];int mx_and = 0;for (int i = 1; i <= n; i++)for (int j = i + 1; j <= n; j++)mx_and = max(mx_and, a[i] & a[j]);cout << mx_and;return 0;
}

对于 100 % 100\% 100% 的测试点:

思路1:

AND 运算结果的大与小由高位决定:高位为 1 1 1 越多,结果越大。我们从高位往低位贪心,希望两个数在高位尽可能都为 1 1 1

我们可以:

  1. 遍历 31 ∼ 0 31 \sim 0 310 位(因为数据范围不超过 2 31 − 1 2^{31}-1 2311

  2. 每次筛出当前位为 1 1 1 的数集合

  3. 如果这集合里数量 ≥ 2 ≥ 2 2,就只保留它们继续往低位考虑

  4. 最终从这些数中找一组最大 AND 值

主逻辑

int mx_and = 0;
for(int pos = 31; pos >= 0; pos--) {int num = check_and(1, n, pos);if(num >= 2) {mx_and |= (1 << pos);n = num;}
}

从最高位 31 31 31 递减到最低位 0 0 0,逐位处理:for(int pos = 31; pos >= 0; pos--)

每次调用 check_and 将数组按照该位是否为 1 1 1 重新划分:int num = check_and(1, n, pos);

如果划分后,第 p o s pos pos 位为 1 1 1 的数不少于 2 2 2 个,则将该位保留在答案中,同时更新数组范围只保留这部分数,继续判断下一位,如果不足两个数,则该位不能保留。

if(num >= 2) 
{mx_and |= (1 << pos);n = num;
}

关键函数解析:check_and

int check_and(int l, int r, int bit) 
{int i = l, j = r;while (i <= j) {// 左指针跳过第 bit 位为 1 的数while (i <= j && ((a[i] >> bit) & 1)) i++;// 右指针跳过第 bit 位为 0 的数while (i <= j && !((a[j] >> bit) & 1)) j--;if (i < j) swap(a[i++], a[j--]);}return j;
}

该函数将数组 [ l . . r ] [l..r] [l..r] 中的元素根据第 b i t bit bit 位分为两部分:

  • 左半部分是第 b i t bit bit 位为 1 1 1 的数。

  • 右半部分是第 b i t bit bit 位为 0 0 0 的数。

返回值 j j j 表示第 b i t bit bit 位为 1 1 1 的数所在区间的最后一个位置。

完整代码

#include<bits/stdc++.h>
using namespace std;int n , a[1000009];int check_and(int i , int j , int bit)
{while(i <= j){while(i <= j && a[i] >> bit & 1) i++;while(i <= j && !(a[j] >> bit & 1))j--;if(i <= j)	swap(a[i++] , a[j--]);}return j;
}
int main()
{cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];int mx_and = 0;for(int pos = 31; pos >= 0; pos--){int num = check_and(1 , n , pos);if(num >= 2){mx_and |= 1 << pos;n = num;}}cout << mx_and;return 0;
}

思路2:

从数组中取出最大的 32 32 32 个数,然后在它们之间暴力两两组合,求最大 a[i] & a[j]

  1. AND 的值由高位影响最大

    因为 AND 运算中,只有两个数该位都是 1 1 1,结果才是 1 1 1,所以想让结果最大,就要让两个数在高位尽量都是 1 1 1。高位相同的数才更容易 AND 出更大的数。

  2. 越大的数,高位 1 1 1 越可能多

    数值大的数,二进制中左侧(高位)出现 1 1 1 的概率更高,所以最大 AND 通常出现在“比较大的两个数”之间。

  3. 最多 32 32 32 个不同高位组合

    因为 i n t int int 32 32 32 位,最多有 32 32 32 个不同的“最高位为 1 1 1”的模式,所以只取最大 32 32 32 个数,就等于把每一种高位代表的结构都涵盖了。

参考代码

#include<bits/stdc++.h>
using namespace std;int n , a[1000009];int main()
{cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];sort(a + 1 , a + n + 1 , greater<int>());n = min(n , 32);int mx_and = 0;for(int i = 1; i <= n; i++)for(int j = i + 1; j <= n; j++)mx_and = max(mx_and , a[i] & a[j]);cout << mx_and;return 0;
}
http://www.dtcms.com/wzjs/386575.html

相关文章:

  • 首商网官网优化公司流程制度
  • 解决国外网站很慢代刷网站推广链接0元价格
  • 安徽省建设厅网站域名微信公众号推广网站
  • 高端网站建设口碑seo基础优化包括哪些内容
  • 南昌市建设工程质量监督站网站广东的seo产品推广服务公司
  • 海南网站建设中心搜什么关键词能找到网站
  • 招聘网站做两份简历医疗网站优化公司
  • 网站在建设时不容忽略的一些细节百度搜索优化平台
  • 动态网站 价格怎么做一个网站
  • discuz应用中心破解企业网站seo贵不贵
  • 做视频网站版权怎么解决武汉网站seo服务
  • 合肥优化排名推广宁波seo教程推广平台
  • 株洲网站建设优化企业网页开发培训网
  • php网站开发实例代码市场调研报告范文3000字
  • 企业网站建设流程的第一步工作是2345网止导航
  • asp网站建设项目实训营销型网站有哪些平台
  • 图片展示类网站各引擎收录查询
  • 郑州东区网站优化公司推荐谷歌网站网址
  • 余姚响应式网站建设黑帽seo技术有哪些
  • 西安网站建设小红书网络营销策划方案
  • 网站建设贰金手指下拉贰壹2023年8月新冠疫情
  • 网站页头制作萝卜建站
  • 在马来西亚做博彩网站合法吗公司网站设计公司
  • 服装网上商城网站建设报告百度一下浏览器下载安装
  • 金牛区建设和交通局网站个人博客网页设计
  • 网站版心怎么做seo做的好的网站
  • 大连网站建设哪家好安康seo
  • 做平面设计都在那个网站找免费素材百度首页的ip地址
  • 网站建设 繁体免费搭建自己的网站
  • 装潢设计图片三室一厅郑州关键词优化平台