QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#719548#514. The Punctilious Cruciverbalistkevinyang#WA 0ms3632kbC++204.1kb2024-11-07 03:30:112024-11-07 03:30:13

Judging History

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

  • [2024-11-07 03:30:13]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3632kb
  • [2024-11-07 03:30:11]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i,a,b) for (int i=a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;



int R, C;

const int MAXN = 55;
char g[MAXN][MAXN];
bool startA[MAXN][MAXN];
bool startD[MAXN][MAXN];


inline bool inr(int i, int j) {
    return i >= 1 && j >= 1 && i <= R && j <= C;
}

inline bool can_letter(int i, int j) {
    return inr(i,j) && g[i][j] != '#';

}

struct Clue {
    int id;
    char dir;
    int i;
    int j;
    int num;
    int den;
    
    bool better(const Clue& o) const {
        int lhs = num*o.den;
        int rhs = den*o.num;
        if (lhs != rhs) return lhs > rhs;
        if (dir != o.dir) return dir=='A';
        return id < o.id;
    }
    bool operator<(const Clue& o) const {
        // a < b if a is worse than b
        return !better(o);
    }
    Clue(int id, char dir, int i, int j) : id(id), dir(dir), i(i), j(j) {}

    void eval() {
        int ci = i;
        int cj = j;
        int di = 0;
        int dj = 0;
        if (dir == 'A') dj = 1;
        else di = 1;
        string pat = "";
        while (can_letter(ci, cj)) {
            pat.push_back(g[ci][cj]);
            ci += di;
            cj += dj;
        }
        num = 0;
        den = 0;
        int N = pat.size();
        for (int i = 0; i < N; ++i) {
            if (pat[i] == '.') {
                // no letter
                den += N-i;
            } else {
                // has letter
                num += N-i;
                den += N-i;
            }
        }
        cout << "EVALED: ";
        print();
        cout << num << ' ' << den << '\n';
    }

    bool solved() const {
        return num==den;
    }

    string get_tag() const {
        string ret = "";
        ret += to_string(id);
        ret += string(1, dir);
        return ret;
    }

    void solve() {
        int ci = i;
        int cj = j;
        int di = 0;
        int dj = 0;
        if (dir == 'A') dj = 1;
        else di = 1;
        while (can_letter(ci, cj)) {
            g[ci][cj] = 'S';
            ci += di;
            cj += dj;
        }
    }

    void print() {
        cout << "clue: " << id << ' ' << dir << ' ' << i << ' ' << j << '\n';
    }
};



signed main() {
    cin.tie(0)->sync_with_stdio(0);

    cin >> R >> C;
    for (int i = 1; i <= R; ++i) {
        for (int j = 1; j <= C; ++j) {
            cin >> g[i][j];
            if (g[i][j] >= 'A' && g[i][j] <= 'Z') g[i][j] = 'S';
        }
    }
    for (int i = 1; i <= R; ++i) {
        for (int j= 1; j <= C; ++j) {
            int pi = i;
            int pj = j-1;
            if (!inr(pi,pj) || g[pi][pj] == '#') startA[i][j] = 1;
            pi = i-1;
            pj = j;
            if (!inr(pi,pj) || g[pi][pj] == '#') startD[i][j] = 1;
        }
    }
    vector<Clue> clues;
    int clue_num = 0;
    for (int i = 1; i <= R; ++i) {
        for (int j = 1; j <= C; ++j) {
            if (g[i][j] == '#') continue;
            if (startA[i][j] && startD[i][j]) {
                int n = ++clue_num;
                clues.push_back(Clue{n, 'A', i, j});
                clues.push_back(Clue{n, 'D', i, j});
            } else if (startA[i][j]) {
                clues.push_back(Clue{++clue_num, 'A', i, j});
            } else if (startD[i][j]) {
                clues.push_back(Clue{++clue_num, 'D', i, j});
            }
        }
    }


        for (Clue& clue : clues) {
            clue.print();
        }

    vector<string> ans;
    while (true) {
        for (Clue& clue : clues) {
            clue.eval();
        }
        sort(clues.begin(), clues.end());
        while (clues.size() && clues.back().solved()) {
            clues.pop_back();
        }
        if (clues.empty()) break;
        ans.push_back(clues.back().get_tag());
        clues.back().solve();
        clues.pop_back();
    }

    for (const string& a : ans) {
        cout << a << '\n';
    }


}


/*
4 4
...#
....
JAVA
#...

*/

详细

Test #1:

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

input:

4 4
...#
....
....
#...

output:

clue: 1 A 1 1
clue: 1 D 1 1
clue: 2 D 1 2
clue: 3 D 1 3
clue: 4 A 2 1
clue: 5 D 2 4
clue: 6 A 3 1
clue: 7 A 4 2
EVALED: clue: 1 A 1 1
0 6
EVALED: clue: 1 D 1 1
0 6
EVALED: clue: 2 D 1 2
0 10
EVALED: clue: 3 D 1 3
0 10
EVALED: clue: 4 A 2 1
0 10
EVALED: clue: 5 D 2 4
0 6
EVALED: clue: 6 A 3 1
0 10
EV...

result:

wrong answer 1st lines differ - expected: '1A', found: 'clue: 1 A 1 1'