爆零了, 但没完全爆(赏一关)
查看原帖
爆零了, 但没完全爆(赏一关)
818165
aaron0919楼主2023/7/14 15:59

就是懒, 用 stl 容器, 希望某位大佬调教

#include <bits/stdc++.h>
#define fre(x) freopen(#x ".in", "r", stdin), freopen(#x ".out", "w", stdout);
#define heap priority_queue
using namespace std;
typedef long long ll;

char buf[1 << 23], *p1 = buf, *p2 = buf;
// #define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)

inline ll read()
{
    ll s = 0;
    char ch = getchar(), last;
    while (ch < '0' || ch > '9')
        last = ch, ch = getchar();
    while (ch >= '0' && ch <= '9')
        s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
    return last == '-' ? -s : s;
}

const int N = 1e3 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;

struct Student
{
    int self_point;
    int tim;
};

bool cmp(Student a, Student b)
{
    return a.self_point == b.self_point ? a.tim < b.tim : a.self_point < b.self_point;
}

Student a[N];
int n, k;
map<char, vector<Student>> tim;
int point[N][N];

int main()
{
    n = read(), k = read();
    for (int i = 1; i <= n; i++)
    {
        scanf("%d %c", &a[i].self_point, &a[i].tim);
        tim[a[i].tim].push_back(a[i]);
    }
    for (int i = 1; i <= n; i++)
    {
        a[i].self_point = 0, a[i].tim = 0;
    }

    for (int i = 1; i <= k; i++)
    {
        for (int j = 1; j <= k; j++)
        {
            point[j][i] = read();
        }
    }

    vector<Student> kk;
    for (int i = 1; i <= k; i++)
    {
        int sum1 = 0, sum2 = 0, cnt = 0;
        for (int j = 1; j <= k; j++)
        {
            sum1 += point[i][j];
        }
        sum1 = round(1.0 * sum1 / k);
        for (int j = 1; j <= k; j++)
        {
            if (abs(point[i][j] - sum1) <= 15)
            {
                cnt++;
                sum2 += point[i][j];
                // printf("%d ", point[i][j]);
            }
        }
        // printf("\n");
        sum2 = round(1.0 * sum2 / cnt);
        for (auto j : tim[(char)i + 'A' - 1])
        {
            j.self_point = round(j.self_point * 0.6 + sum2 * 0.4);
            kk.push_back(j);
        }
    }
    sort(kk.begin(), kk.end(), cmp);
    while (!kk.empty())
    {
        auto i = *(kk.end() - 1);
        printf("%d %c\n", i.self_point, i.tim);
        kk.pop_back();
    }
    return 0;
}
2023/7/14 15:59
加载中...