Submission #1314879

#TimeUsernameProblemLanguageResultExecution timeMemory
1314879thaibaotran555Topical (NOI23_topical)C++20
61 / 100
1095 ms39716 KiB
///TRAN THAI BAO :3

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>

using namespace std;

typedef vector<long long> vi;
typedef pair<long long, long long> pii;

#define maxN 1000007

int n, k;
vector<vi>u;
vector<vi>r;
long long q[maxN] = {0};
bool used[maxN] = {false};
pii ur3[maxN];

void readData()
{
    vi emp;
    for(int i = 0; i <= k; i++)
        emp.push_back(0);
    for(int i = 0; i <= n; i++)
    {
        u.push_back(emp);
        r.push_back(emp);
    }
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= k; j++)
            cin >> r[i][j];
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= k; j++)
            cin >> u[i][j];
}

bool checkCourse(int x)
{
    int ans = 0;
    for(int i = 1; i <= k; i++)
        if(q[i] >= r[x][i])
            ans++;
    return ans==k;
}

void sub1()
{
    readData();
    if(checkCourse(1))
    {
        cout << 1;
        return;
    }
    cout << 0;
}

void sub2()
{
    readData();
    int nxt = 1, ans = 0;
    while(nxt != -1)
    {
        nxt = -1;
        for(int i = 1; i <= n; i++)
        {
            if(used[i])
                continue;
            if(checkCourse(i))
            {
                nxt = i;
                break;
            }
        }
        if(nxt != -1)
        {
            used[nxt] = true;
            for(int i = 1; i <= k; i++)
                q[i] += u[nxt][i];
            ans++;
        }
    }
    cout << ans;
}

void sub3()
{
    for(int i = 1; i <= n; i++)
        cin >> ur3[i].first;
    for(int i = 1; i <= n; i++)
        cin >> ur3[i].second;
    sort(ur3+1, ur3+n+1);
    long long curQ = 0;
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
        if(ur3[i].first <= curQ)
        {
            ans++;
            curQ += ur3[i].second;
        }
        else break;
    }
    cout << ans;
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k;
    if(n == 1)
        sub1();
    else if(k == 1)
        sub3();
    else sub2();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...