QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#381614 | #3058. Assignment Algorithm | I_Love_Sonechka# | WA | 1ms | 3872kb | C++14 | 2.3kb | 2024-04-07 19:19:28 | 2024-04-07 19:19:28 |
Judging History
answer
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
// c++ short types
#define Int long long
#define vt vector
void solver() {
int r, n; cin >> r >> n;
int cnt_leftside = 0, cnt_rightside = 0;
vt<string> a(r+4);
string temp = "ABC.DEF.GHI", leftside = "ABCD", rightside="FGHI";
vt<string> order = {"DF", "CG", "AI", "E", "BH"};
vt<int> exit_rows = {1, r/2 + 2, r + 3};
vt<int> free(r+4, 9);
for(int i = 1; i <= r+3; ++i) {
cin >> a[i];
if(find(exit_rows.begin(), exit_rows.end(), i) == exit_rows.end()) {
for(int j = 0; j < a[i].size(); ++j) if(a[i][j] == '#') {
free[i] --;
cnt_leftside += leftside.find(temp[j]) != string::npos;
cnt_rightside += rightside.find(temp[j]) != string::npos;
}
}
}
for(int i = 0; i < n; ++i) {
vt<int> rows = {};
for(int k = 1; k <= r + 3; ++k) {
if(find(exit_rows.begin(), exit_rows.end(), k) == exit_rows.end() && free[k]) {
rows.push_back(k);
}
}
auto Get = [&](int i) -> vt<int> {
int dist = r + 3;
for(int j : exit_rows) {
dist = min(dist, abs(j-i));
}
for(int j: exit_rows) {
if(i == j + 1) {
return {-(int)1e9 - free[i], dist, i};
}
}
return {-free[i], dist, i};
};
sort(rows.begin(), rows.end(), [&](int l, int r) {
return Get(l) < Get(r);
});
int id = rows[0];
vt<int> poses;
for(int j = 0; j < temp.size(); ++j) if(temp[j] != '.' && a[id][j] == '-') {
poses.push_back(j);
}
auto Get2 = [&](int k) -> vt<int> {
char c = temp[k];
for(int j = 0; j < order.size(); ++j) {
for(auto ch: order[j]) {
if(ch == c) {
int cnt = leftside.find(ch) != string::npos ? cnt_leftside : cnt_rightside;
return {j, cnt, +ch-'A'};
}
}
}
return {-1, -1};
};
sort(poses.begin(), poses.end(), [&](int l, int r) {
return Get2(l) < Get2(r);
});
int pos = poses[0];
char c = temp[pos];
if(leftside.find(c) != string::npos) {
cnt_leftside++;
} else if(rightside.find(c) != string::npos) {
cnt_rightside++;
}
free[id] --;
a[id][pos] = i + 'a';
}
for(auto s: a) {
cout << s << endl;
}
}
int main()
{
//ios::sync_with_stdio(false); cin.tie(nullptr);
int tt = 1;
for(int t = 0; t < tt; ++t) {
solver();
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3872kb
input:
2 17 ........... ---.#--.--- ........... ---.---.--- ...........
output:
........... hnd.#lb.fpj ........... kqg.cma.eoi ...........
result:
wrong answer 1st lines differ - expected: '...........', found: ''