1 条题解
-
0
方法思路
- 吸引度为 |点赞数 - 点踩数|,要使其最大化,我们需要让点赞数和点踩数的差值尽可能大
- 对于每个帖子,我们有两种选择:选择或不选择
- 如果选择一个帖子,它会对点赞数和点踩数分别产生贡献
- 我们可以将每个帖子看作是对点赞数和点踩数差值的贡献:(a[i] - b[i])
- 如果贡献为正,它会增加点赞数与点踩数的差值;如果为负,它会减少差值
- 因此,我们可以贪心地选择所有贡献为正的帖子来增加点赞数,或选择所有贡献为负的帖子来增加点踩数
- 最终,取两种情况的最大值
代码实现
Java
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); long[] a = new long[n]; long[] b = new long[n]; String[] likes = br.readLine().split(" "); String[] dislikes = br.readLine().split(" "); for (int i = 0; i < n; i++) { a[i] = Long.parseLong(likes[i]); b[i] = Long.parseLong(dislikes[i]); } long sumLikes = 0; long sumDislikes = 0; for (int i = 0; i < n; i++) { // 如果选择这个帖子会增加点赞数与点踩数的差值 if (a[i] > b[i]) { sumLikes += a[i]; sumDislikes += b[i]; } } long maxDiff1 = Math.abs(sumLikes - sumDislikes); sumLikes = 0; sumDislikes = 0; for (int i = 0; i < n; i++) { // 如果选择这个帖子会增加点踩数与点赞数的差值 if (a[i] < b[i]) { sumLikes += a[i]; sumDislikes += b[i]; } } long maxDiff2 = Math.abs(sumLikes - sumDislikes); System.out.println(Math.max(maxDiff1, maxDiff2)); } }
Python
def max_attraction(): n = int(input()) likes = list(map(int, input().split())) dislikes = list(map(int, input().split())) sum_likes1 = 0 sum_dislikes1 = 0 # 选择所有 likes > dislikes 的帖子 for i in range(n): if likes[i] > dislikes[i]: sum_likes1 += likes[i] sum_dislikes1 += dislikes[i] max_diff1 = abs(sum_likes1 - sum_dislikes1) sum_likes2 = 0 sum_dislikes2 = 0 # 选择所有 likes < dislikes 的帖子 for i in range(n): if likes[i] < dislikes[i]: sum_likes2 += likes[i] sum_dislikes2 += dislikes[i] max_diff2 = abs(sum_likes2 - sum_dislikes2) return max(max_diff1, max_diff2) print(max_attraction())
C++
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n; cin >> n; vector<long long> a(n), b(n); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { cin >> b[i]; } long long sum_likes1 = 0, sum_dislikes1 = 0; // 选择所有 likes > dislikes 的帖子 for (int i = 0; i < n; i++) { if (a[i] > b[i]) { sum_likes1 += a[i]; sum_dislikes1 += b[i]; } } long long max_diff1 = abs(sum_likes1 - sum_dislikes1); long long sum_likes2 = 0, sum_dislikes2 = 0; // 选择所有 likes < dislikes 的帖子 for (int i = 0; i < n; i++) { if (a[i] < b[i]) { sum_likes2 += a[i]; sum_dislikes2 += b[i]; } } long long max_diff2 = abs(sum_likes2 - sum_dislikes2); cout << max(max_diff1, max_diff2) << endl; return 0; }
- 1
信息
- ID
- 83
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者