제출 #1297534

#제출 시각아이디문제언어결과실행 시간메모리
1297534samarthkulkarniTopical (NOI23_topical)C++20
100 / 100
504 ms98984 KiB
// noi 2023 final round #include <bits/stdc++.h> using namespace std; #define ll long long #define vi vector<long long> #define all(x) x.begin(), x.end() #define endl "\n" #define pr pair<ll, ll> #define ff first #define ss second void solution(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); solution(); return 0; } void solution() { ll n, k; cin >> n >> k; vi cnt(n); vector<vector<pr>> a(k); vector<vi> b(n, vi(k)); for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { ll x; cin >> x; a[j].push_back({x, i}); } } for (int i = 0; i < k; i++) { sort(all(a[i]), greater<pr>()); } for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { cin >> b[i][j]; } } set<ll> avl; vi curr(k); for (int i = 0; i < k; i++) { while (a[i].size() > 0 && a[i].back().ff <= curr[i]) { cnt[a[i].back().ss]++; if (cnt[a[i].back().ss] == k) avl.insert(a[i].back().ss); a[i].pop_back(); } } ll ans = 0; while (avl.size() > 0) { ans++; ll i = *avl.begin(); avl.erase(avl.begin()); for (int j = 0; j < k; j++) { curr[j] += b[i][j]; } for (int j = 0; j < k; j++) { while (a[j].size() > 0 && a[j].back().ff <= curr[j]) { cnt[a[j].back().ss]++; if (cnt[a[j].back().ss] == k) avl.insert(a[j].back().ss); a[j].pop_back(); } } } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...