giúp tui với mn ơi
Hùng là một con người tự do, thích khám phá những điều mới lạ; vì vậy, cậu rất thích những bộ môn có chữ "freestyle", cụ thể là freestyle rap và mới đây nhất là Freestyle Chess.
Mới đây, giải đầu tiên thuộc hệ thống giải đấu Grand Slam của Freestyle Chess (một tổ chức chuyên tổ chức các giải đấu cờ ngẫu nhiên Fischer, là một thể thức cờ vua mà hàng 1 bên trắng và hàng 8 bên đen được xáo trộn ngẫu nhiên sao cho hai Tượng của mỗi bên phải nằm ở hai ô màu khác nhau và Vua phải nằm giữa hai Xe).
Sau khi Hùng thấy thần tượng Carlsen của mình dừng chân tại bán kết, Hùng quyết định vung tiền để mở giải Freestyle Array Picker, với hy vọng mời được anh ta về làm quán quân đầu tiên của môn cờ mới này.
Trò chơi hai người này gồm một bàn cờ có n quân cờ. Hai bên cũng được gọi là bên Trắng và bên Đen. Tuy nhiên, đúng với chất "freestyle", luật chơi chứa rất nhiều thứ ngẫu nhiên và tự do:
Tuy nhiên, tự do bao giờ cũng kèm theo nguyên tắc và mục tiêu. Bên Trắng cần làm cho số điểm của mình cao nhất có thể, trong khi bên Đen cần tìm cách để hạ số điểm của Trắng xuống thấp nhất có thể. Số điểm của bên Trắng được tính như sau:
Mỗi ván đấu gồm hai hiệp với bàn cờ giống nhau, người chơi hiệp này cầm quân Trắng thì hiệp kia cầm quân Đen và ngược lại; người chơi nào đạt được nhiều điểm hơn khi cầm quân Trắng sẽ thắng. Ở trong các giải đấu chính thức, thường sẽ có hai thể thức: một là ván này cầm quân Trắng ở hiệp đầu thì ván sau hiệp đầu cầm quân Đen, hai là chơi hai hiệp cùng lúc với nhau.
Sau khi (giả vờ) bốc thăm xếp cặp thi đấu, (để tăng sức hút (nhất là với khán giả Việt Nam), Hùng đã dàn xếp để) trận khai mạc giải Freestyle Array Picker sẽ là cuộc so tài giữa Magnus Carlsen và Lê Quang Liêm. Đồng thời, để thỏa mãn người xem, Hùng sẽ truyền hình trực tiếp toàn bộ các trận đấu của giải lên các nền tảng streaming, với đồ họa hình ảnh như một giải đấu cờ thực thụ.
Nếu bạn xem các giải đấu cờ khác, bạn sẽ thấy bên cạnh bàn cờ là một AI dự đoán kết quả, với xác suất thắng của mỗi bên hoặc chiếu hết trong bao nhiêu nước. Tuy nhiên, luật chơi của Array Picker quá phức tạp, nên khó để tính xác suất thắng, tuy nhiên ta có thể tính được số điểm tối đa của bên Trắng sau mỗi lượt đi.
Bạn được thuê về để làm AI cho giải đấu, và sau đây là khởi đầu cho công việc:
Yêu cầu: Cho bàn cờ ban đầu. Giả sử hai bên chơi tối ưu nhất, tức bên Trắng luôn tìm cách để điểm số cao nhất, trong khi bên Đen tìm cách để điểm số của Trắng thấp nhất; hãy tính số điểm tối đa đạt được của bên Trắng khi ván đấu kết thúc.
Input
Output
Scoring
Example
Sample Input 1
Copy8 1 1 4 2 1 3 5 1 2 1
Sample Output 1
Copy5
Note
Biên bản ván chơi như sau: W1++ B4 W5++ B2 W3+ B6 W8 B7, với mỗi nước đi được ký hiệu là ci với c là lượt đi của Trắng(W) hay Đen(B), i thể hiện việc chọn quân Ai, và mỗi dấu + biểu thị một điểm cho bên Trắng.
làm c++
Hãy luôn nhớ cảm ơn và vote 5*
nếu câu trả lời hữu ích nhé!
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
long long a, b;
cin >> n >> a >> b;
map<int, int> freq;
for (int i = 0; i < n; i++) {
int color;
cin >> color;
freq[color]++;
}
vector<int> counts;
for (auto &p : freq) {
counts.push_back(p.second);
}
sort(counts.rbegin(), counts.rend()); // Sắp xếp giảm dần
long long score = 0;
int firstPick = 0;
for (int cnt : counts) {
if (firstPick < cnt) {
score += a;
firstPick++;
}
}
score += b * firstPick;
cout << score << endl;
return 0;
}
Giải thích thuật toán
map<int, int>
để đếm tần suất xuất hiện của từng màu.a
).a
điểm.b
điểm.Độ phức tạp
O(n)
.O(k log k)
, với k
là số màu khác nhau (k ≤ n).O(k)
.O(n log n)
.Ví dụ chạy thử
8 1 1
4 2 1 3 5 1 2 1
Output
5
Hãy giúp mọi người biết câu trả lời này thế nào?
Bảng tin