1 solutions
-
1
题目大意
这道题目要求将一组糖果分成两堆,使得按照kozi的加法方式(即二进制异或运算),两堆糖果的总重量相等。同时,塔子哥希望自己获得的糖果总重量尽可能大。
思路:贪心
具体步骤 1.计算总体异或值和总重量:
遍历所有糖果,计算它们的总重量sum和总体异或值m。 同时,记录最小重量的糖果mn。
2.判断分组的可行性:
如果总体异或值m不为0: 无法将糖果分成两堆异或值相等的部分。 输出"NO",表示无法满足kozi的要求。
如果总体异或值m为0: 存在至少一种分组方式使得两堆糖果的异或值相等。 为了让塔子哥获得尽可能多的糖果,总重量最大化,可以采用贪心策略: 将重量最小的一块糖果分给kozi,这样塔子哥获得的糖果总重量为sum - mn。
3.输出结果:
根据上述判断,输出塔子哥的糖果总重量或"NO"
代码
C++代码
#include<bits/stdc++.h> using namespace std; // 定义解决函数 void solve() { int n; // 糖果的数量 int m = 0; // 总异或值初始化为0 long long sum = 0; // 总重量初始化为0 int mn = 1e9; // 最小重量初始化为一个较大的值 cin >> n; // 读取糖果的数量 // 遍历每一块糖果,读取其重量并更新总重量、总异或值和最小重量 for(int i = 0, x; i < n; ++i) { cin >> x; // 读取第i块糖果的重量 sum += x; // 累加总重量 m ^= x; // 计算总异或值 mn = min(mn, x); // 更新最小重量 } if(m == 0) { // 如果总异或值为0,表示可以分成两堆异或值相等 cout << sum - mn << endl; // 输出塔子哥可以获得的最大糖果总重量 } else { // 如果总异或值不为0,无法分成两堆异或值相等 cout << "NO" << endl; // 输出"NO" } } signed main() { solve(); // 调用解决函数 return 0; // 程序结束 }
python代码
def solve(): n = int(input()) # 读取糖果的数量 m = 0 # 初始化总异或值为0 total_sum = 0 # 初始化总重量为0 mn = int(1e9) # 初始化最小重量为一个较大的值 a = list(map(int, input().split())) # 读取所有糖果的重量并存储在列表a中 for x in a: total_sum += x # 累加每块糖果的重量到总重量 m ^= x # 计算所有糖果重量的异或值 mn = min(mn, x) # 更新最小重量 if m == 0: print(total_sum - mn) # 如果总异或值为0,输出塔子哥可以获得的最大糖果总重量 else: print("NO") # 如果总异或值不为0,输出"NO",表示无法分组 if __name__ == "__main__": solve()
Java代码
import java.util.Scanner; public class Main { public static void main(String[] args) { solve(); // 调用解决函数 } static void solve() { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // 读取糖果的数量 int m = 0; // 初始化总异或值为0 long sum = 0; // 初始化总重量为0 int mn = 1000000000; // 初始化最小重量为一个较大的值 // 遍历每一块糖果,读取其重量并更新总重量、总异或值和最小重量 for (int i = 0; i < n; i++) { int x = sc.nextInt(); // 读取第i块糖果的重量 sum += x; // 累加总重量 m ^= x; // 计算总异或值 mn = Math.min(mn, x); // 更新最小重量 } if (m == 0) { // 如果总异或值为0,表示可以分成两堆异或值相等 System.out.println(sum - mn); // 输出塔子哥可以获得的最大糖果总重量 } else { // 如果总异或值不为0,无法分成两堆异或值相等 System.out.println("NO"); // 输出"NO" } sc.close(); // 关闭扫描器 } }
- 1
Information
- ID
- 42
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 4
- Tags
- # Submissions
- 36
- Accepted
- 18
- Uploaded By