首页 > 编程语言 >gesp(C++五级)(6)洛谷:B3930:[GESP202312 五级] 烹饪问题

gesp(C++五级)(6)洛谷:B3930:[GESP202312 五级] 烹饪问题

时间:2025-01-15 13:31:44浏览次数:3  
标签:10 洛谷 GESP202312 int 32 样例 食材 契合 五级

gesp(C++五级)(6)洛谷:B3930:[GESP202312 五级] 烹饪问题

在这里插入图片描述

题目描述

有 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 ,那么它们的契合度为 $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 12and6=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 N≤1,000;

对于所有测试点,保证 N ≤ 1 0 6 N \le 10^6 N≤106, 0 ≤ a i ≤ 2 , 147 , 483 , 647 0\le a_i \le 2,147,483,647 0≤ai​≤2,147,483,647。

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*优化思路:
  k位二进制时,前k+1位一定能渠道最优(感兴趣的可以证明下)
  本题的数据最多31位二进制,所以找前32位大的数据枚举即可 
  1、先对原数组排序(从大到小排序) 
  2、取前32个最大数,依次枚举做&运算,取最大值就是答案 
  备注:优化后的双重循环的复杂度最多32*32,sort排序的复杂度为n*logn,不会TLE 
*/ 
const int N=1e6+10;
int n,a[N],ans=0;
bool cmp(int x,int y){
	return x>y;
} 
int main(){ 
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	//数组排序,降序排序 
	sort(a+1,a+n+1,cmp);
	//n有可能不够32个
	int m=min(n,32);//m是需要做&运算的数的个数 
	//枚举 
	for(int i=1;i<=m-1;i++){//枚举:&前面的x 
		for(int j=i+1;j<=m;j++){//枚举:&后面的y
			ans=max(ans,a[i]&a[j]); 
		} 
	}
	//输出答案
	cout<<ans; 
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

标签:10,洛谷,GESP202312,int,32,样例,食材,契合,五级
From: https://blog.csdn.net/weixin_66461496/article/details/145155082

相关文章

  • 2021 年 3 月青少年软编等考 C 语言五级真题解析
    目录T1.红与黑思路分析T2.密室逃脱思路分析T3.求逆序对数思路分析T4.最小新整数思路分析T1.红与黑有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计......
  • 洛谷B3733 [信息与未来 2017] 基因组分析密码锁题解
    [信息与未来2017]密码锁题目描述乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0 向下拨得到9)。拨盘上的数字组成一个5 位数。只要拨盘上的数字变为素数,密码锁就会被解开。素......
  • 洛谷 P1102 A-B 数对(二分写法)
    题目:P1102A-B数对-洛谷|计算机科学教育新生态题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A−B=C 的数对的个数(不同位置的数......
  • 洛谷P2181 对角线
    对于一个 ......
  • 洛谷题单指南-线段树的进阶用法-P3157 [CQOI2011] 动态逆序对
    原题链接:https://www.luogu.com.cn/problem/P3157题意解读:长度为n的序列,序列是1~n的排列,一共m个删除操作,每一个删除之前输出逆序对。解题思路:要计算静态的逆序对,可以通过树状数组、权值线段树等方式,时间复杂度都是O(nlogn)要计算动态的逆序对,算上每一次删除,暴力做法需要O(mnlo......
  • 洛谷 P3615 如厕计划
    题意:2n个人排队上厕所,有两个厕所,一个男女都可以上,一个只有女的可以上,每个人上厕所都只有一分钟,你可以调整这些人的顺序,每个的怒气值为有多少后面的人排到自己前面了。求可以n分钟上完厕所的情况中,怒气最大的最小。这题看半天没思路,只能看题解。首先厕所一分钟都不能停,要么男女一......
  • 洛谷 P1928 外星密码
    好久不见,随便找一题找找感觉。递归写法:#include<bits/stdc++.h>usingnamespacestd;strings;stringtimes(stringx,intcnt){ stringnewstr=""; while(cnt--)newstr+=x; returnnewstr;}pair<string,int>decompress(intpos){ intnum=0; stringte......
  • 洛谷 P2754 [CTSC1999] 家园 / 星际转移问题——题解
    #ifdefONLINE_JUDGE#else#defineQiu_Cheng#endif#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;//typedeflonglongll;constintN=2e6+5,mod=1e9+7,inf=INT_MAX;//constintmod1=469762049,mod2=998244353,mod3=1004535......
  • 洛谷 P1550 [USACO08OCT] Watering Hole G 题解
     由于无法提交题解所以来csdn蹭个位置  题目链接  这道题我的思路就是用并查集(推荐先学习:并查集(B站视频))将所有农场连接成n个(几个都不重要)连通块,用一个优先队列(由于作者没找视频所以不放链接了sorry)记录x农场连接y农场的最小价格。  有个值......
  • 洛谷题单指南-线段树的进阶用法-P4093 [HEOI2016/TJOI2016] 序列
    原题链接:https://www.luogu.com.cn/problem/P4093题意解读:一个序列,m个变化,求任意一个变化后不受影响的最长上升子序列长度。解题思路:设原序列为a[N],原序列经过变化后能得到的最大值序列为maxa[N],最小值序列为mina[N]设f[i]表示以第i个数结尾的最长不降子序列长度有f[i]=max......