QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#747104 | #9573. Social Media | xtqqwq | WA | 54ms | 3720kb | C++17 | 4.2kb | 2024-11-14 16:21:28 | 2024-11-14 16:21:29 |
Judging History
answer
#include <iostream>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
#include <set>
using namespace std;
int main() {
int T;
cin >> T;
vector<int> results;
while (T--) {
int n, m, k;
cin >> n >> m >> k;
unordered_set<int> friends;
for (int i = 0; i < n; i++) {
int friend_id;
cin >> friend_id;
friends.insert(friend_id);
}
vector<pair<int, int>> comments;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
comments.emplace_back(a, b);
}
int initial_visible_count = 0;
unordered_map<int, int> single_friend_gain;
unordered_map<int, set<int>> both_needed;
for (const auto& comment : comments) {
int a = comment.first;
int b = comment.second;
if (friends.count(a) && friends.count(b)) {
initial_visible_count++;
} else if (friends.count(a)) {
single_friend_gain[b]++;
} else if (friends.count(b)) {
single_friend_gain[a]++;
} else {
both_needed[a].insert(b);
both_needed[b].insert(a);
}
}
// Step 1: Track maximum visibility increase for single additions
int max_single_addition = 0;
for (const auto& [user, gain] : single_friend_gain) {
max_single_addition = max(max_single_addition, gain);
}
// Step 2: Calculate two-friend addition visibility
int max_double_addition = 0;
// Case 1: Two friends from `single_friend_gain`
vector<int> single_friend_gains;
for (const auto& [user, gain] : single_friend_gain) {
single_friend_gains.push_back(gain);
}
sort(single_friend_gains.rbegin(), single_friend_gains.rend());
if (single_friend_gains.size() >= 2) {
max_double_addition = single_friend_gains[0] + single_friend_gains[1];
} else if (!single_friend_gains.empty()) {
max_double_addition = single_friend_gains[0];
}
// Case 2: Two friends from `both_needed`
for (const auto& [user1, needed_set1] : both_needed) {
for (const int& user2 : needed_set1) {
if (user1 < user2) {
int additional_visible = 0;
unordered_set<int> added_friends = {user1, user2};
// Count visibility from single additions for user1 and user2
additional_visible += single_friend_gain[user1] + single_friend_gain[user2];
// Count visibility from comments requiring both user1 and user2
for (const auto& [a, b] : comments) {
if (added_friends.count(a) && added_friends.count(b) && !friends.count(a) && !friends.count(b)) {
additional_visible++;
}
}
max_double_addition = max(max_double_addition, additional_visible);
}
}
}
// Step 3: Mixed Pairing: One from `single_friend_gain` and one from `both_needed`
for (const auto& [user, gain] : single_friend_gain) {
for (const auto& [other_user, needed_set] : both_needed) {
if (!friends.count(user) && !friends.count(other_user)) {
int combined_gain = gain;
for (int friend_needed : needed_set) {
if (friend_needed != user && !friends.count(friend_needed)) {
combined_gain++;
}
}
max_double_addition = max(max_double_addition, combined_gain);
}
}
}
// Final result calculation
int max_comments_visible = initial_visible_count + max(max_single_addition, max_double_addition);
results.push_back(max_comments_visible);
}
for (int result : results) {
cout << result << endl;
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3492kb
input:
5 4 12 7 5 7 3 6 3 6 2 2 1 4 2 4 1 3 7 6 4 1 5 4 1 1 1 1 2 1 3 7 2 7 6 2 4 1 2 3 2 2 5 5 4 2 6 4 6 2 6 1 1 2 1 1 2 2 1 2 1 2 1 2 2 1 100 24 11 11 24
output:
9 5 1 1 1
result:
ok 5 number(s): "9 5 1 1 1"
Test #2:
score: -100
Wrong Answer
time: 54ms
memory: 3720kb
input:
10000 19 12 20 8 12 1 5 11 7 17 13 19 6 3 9 10 15 14 20 4 18 16 4 11 7 1 8 4 16 19 1 13 15 2 16 2 8 7 3 15 11 13 5 20 18 14 17 14 20 2 9 1 12 8 11 10 17 18 16 3 15 5 14 20 13 7 15 10 3 2 5 16 7 8 6 1 6 4 18 16 1 8 4 1 20 6 6 9 4 15 7 5 14 9 1 3 18 9 15 18 17 15 11 14 7 19 7 3 1 2 5 6 4 7 5 1 4 5 3 1...
output:
12 14 2 19 5 5 3 11 19 4 4 10 6 0 4 19 15 5 18 5 17 5 2 2 7 17 4 2 6 15 6 4 5 5 4 9 3 7 4 1 16 15 3 5 6 12 12 7 6 8 9 8 8 11 16 1 4 9 8 14 3 6 19 19 16 8 20 14 8 12 7 9 6 8 3 17 9 7 5 3 6 6 20 8 13 11 10 5 4 5 5 1 8 5 8 11 7 14 10 9 9 11 7 9 5 2 8 14 10 5 3 5 5 10 2 6 8 16 5 3 19 1 4 8 8 10 5 4 1 15...
result:
wrong answer 3rd numbers differ - expected: '1', found: '2'