QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#650882#4776. Smoking gunSGColin#WA 0ms3508kbC++202.2kb2024-10-18 17:00:122024-10-18 17:00:14

Judging History

你现在查看的是最新测评结果

  • [2024-10-18 17:00:14]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3508kb
  • [2024-10-18 17:00:12]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;

#define eb emplace_back
#define all(s) (s).begin(), (s).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)

const int N = 107;

double t[N][N], dis[N][N];

bool use[N];

inline void work() {
    int n, m;
    cin >> n >> m;
    vector<string> nam; nam.eb("");
    map<string, int> id;
    vector<pii> cor(n + 1);
    vector<int> fires;
    rep(i, 1, n) {
        string str; cin >> str;
        id[str] = i;
        nam.eb(str);
        use[i] = false;
        int x, y; cin >> x >> y;
        cor[i] = {x, y};
    }
    rep(i, 1, n) rep(j, 1, n) {
        t[i][j] = (i == j ? 0 : 1e18);
        auto [x1, y1] = cor[i];
        auto [x2, y2] = cor[j];
        dis[i][j] = sqrt(1.0 * (x1 - x2) * (x1 - x2) + 1.0 * (y1 - y2) * (y1 - y2));
    }
    rep(i, 1, m) {
        string str; cin >> str; while (str == "") cin >> str;
        int a = id[str];
        cin >> str; cin >> str;
        int b = id[str];
        cin >> str; cin >> str; cin >> str;
        int c = id[str];
        double dif = (dis[c][a] - dis[b][a]) / 340;
        t[b][c] = min(t[b][c], dif);
        fires.eb(b);
        fires.eb(c);
    }
    sort(all(fires));
    fires.erase(unique(all(fires)), fires.end());
    rep(k, 1, n) rep(i, 1, n) rep(j, 1, n) t[i][j] = min(t[i][j], t[i][k] + t[k][j]);
    rep(i, 1, n) if (t[i][i] < 0) {puts("IMPOSSIBLE"); return;}
    vector<string> ans;
    rep(turn, 1, fires.size()) {
        int id = 0;
        for (auto j : fires) if (!use[j]) {
            bool fl = true;
            for (auto k : fires) {
                if (!use[k] && k != j) {
                    if (t[j][k] > 0) {fl = false; break;}
                }
            }
            if (fl) {id = j; break;}
        }
        if (id) {ans.eb(nam[id]); use[id] = true;}
        else {puts("UNKNOWN"); return;}
    }
    reverse(all(ans));
    for (auto x : ans) cout << x << " ";
    cout << endl;
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int t; cin >> t;
    while (t--) work();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3508kb

input:

3
4 2
BillyTheKid 0 0
Andy 10 0
John 19 0
Larry 20 0
Andy heard BillyTheKid firing before John
Larry heard John firing before BillyTheKid
2 2
Andy 0 0
Beate 0 1
Andy heard Beate firing before Andy
Beate heard Andy firing before Beate
3 1
Andy 0 0
Beate 0 1
Charles 1 3
Beate heard Andy firing before ...

output:

John BillyTheKid 
IMPOSSIBLE
UNKNOWN

result:

wrong answer 1st lines differ - expected: 'BillyTheKid John', found: 'John BillyTheKid '