30pts,求调,玄关
查看原帖
30pts,求调,玄关
1095058
Unorderd_Juruo楼主2023/11/2 23:12

评测记录

#include <bits/stdc++.h>
#define upf(i, n, k) for (int i = k; i <= n; i++)
#define lowf(i, n, k) for (int i = n; i >= k; i--)
#define Max(a, b, c) max(a, max(b, c))
#define Min(a, b, c) min(a, min(b, c))
#define ofile(N) freopen(N ".in", "r", stdin), freopen(N ".out", "w", stdout)
#define ri register int
#define ie inline
#define ll long long
using namespace std;

ie int read() {
    int s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

ie void out(int a) {
    if (a < 0) putchar('-'), a = -a;
    if (a >= 10)
        out(a / 10);
    putchar(a % 10 + '0');
}

int n, cnt, tt, nb, ld, ff;
// map<char*,int> mp;
int bk[10000001], vis[10000010];
vector<int> g;
char c[1010];

int main() {
    // ofile("");
    n = read();
    for (ri i = 1; i <= n; i++) {
        scanf("%s", c);
        cnt = 1000000, tt = 0, ff = 0;
        for (int i = 0; i < strlen(c); i++)
            if (cnt == 0) {
                if (c[i] != '-') ff = 1;
            } else if (c[i] >= '0' && c[i] <= '9')
                tt += cnt * (c[i] - 48), cnt /= 10;
            else if (c[i] >= 'A' && c[i] <= 'Z') {
                if (c[i] == 'Q' || c[i] == 'Z') continue;
                if (c[i] == 'A' || c[i] == 'B' || c[i] == 'C')
                    tt += (cnt) << 1;
                else if (c[i] == 'D' || c[i] == 'E' || c[i] == 'F')
                    tt += (cnt << 1) + cnt;
                else if (c[i] == 'G' || c[i] == 'H' || c[i] == 'I')
                    tt += (cnt << 2);
                else if (c[i] == 'J' || c[i] == 'K' || c[i] == 'L')
                    tt += (cnt << 2) + cnt;
                else if (c[i] == 'M' || c[i] == 'N' || c[i] == 'O')
                    tt += (cnt << 2) + (cnt << 1);
                else if (c[i] == 'P' || c[i] == 'R' || c[i] == 'S')
                    tt += (cnt << 2) + (cnt << 1) + cnt;
                else if (c[i] == 'T' || c[i] == 'U' || c[i] == 'V')
                    tt += (cnt << 3);
                else if (c[i] == 'W' || c[i] == 'X' || c[i] == 'Y')
                    tt += (cnt << 3) + cnt;
                cnt /= 10;
            }
        if (!ff) bk[tt]++;
        if (bk[tt] > 1 && !vis[tt]) g.push_back(tt), vis[tt] = 1;
    }
    // for (ri i = 0; i <= 9999999; i++)
    // if (bk[i]>1)
    sort(g.begin(), g.end());
    for (auto i : g) {
        // out(i / 10000)
        ld = i / 10000;
        if (ld < 10)
            putchar('0'), putchar('0'), out(ld);
        else if (ld < 100)
            putchar('0'), out(ld);
        else
            out(ld);
        putchar('-');  //, out(i % 10000),
        ld = i % 10000;
        if (ld < 10)
            putchar('0'), putchar('0'), putchar('0'), out(ld);
        else if (ld < 100)
            putchar('0'), putchar('0'), out(ld);
        else if (ld < 1000)
            putchar('0'), out(ld);
        else
            out(ld);
        putchar(' '), out(bk[tt]), puts(""), nb = 1;
    }
    if (!nb) puts("No duplicates.");
    return 0;
}

貌似是统计个数出错,不会调了

2023/11/2 23:12
加载中...