Submission #1170097

#TimeUsernameProblemLanguageResultExecution timeMemory
1170097vibeduckTopical (NOI23_topical)C++20
40 / 100
1101 ms187932 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define pf push_front #define mp make_pair #define fi first #define se second #define int long long #define all(x) (x).begin(), (x).end() typedef long double ld; typedef long long ll; typedef pair<ll,ll> pll; typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<bool> vb; typedef vector<vector<int>> vvi; typedef vector<vector<bool>> vvb; typedef vector<vector<ll>> vvll; typedef vector<string> vs; typedef vector<vector<string>> vvs; typedef vector<char> vc; typedef vector<vector<char>> vvc; typedef map<int, int> mii; typedef unordered_map<int, int> umii; const int mod = 1e9 + 7; const int inf = INTMAX_MAX; const bool tc = false; void add(vi &x, vi &y) { for (int i = 0; i < x.size(); i++) x[i] += y[i]; } inline void solve() { int n, k; cin >> n >> k; vector<pair<vi, vi>> mds(n); vector<set<int>> vs(k + 1); mii cnt; // vs[count] -> set of vals with that count for (int i = 0; i < n; i++) { for (int _ = 0; _ < k; _++) { int x; cin >> x; mds[i].fi.pb(x); } vs[0].insert(i); } for (int i = 0; i < n; i++) { for (int _ = 0; _ < k; _++) { int x; cin >> x; mds[i].se.pb(x); } } vector<vector<pii>> sortedk(k); for (int i = 0; i < k; i++) { for (int j = 0; j < n; j++) { sortedk[i].pb({mds[j].fi[i], j}); } sort(all(sortedk[i])); } vi cur(k); vi ptrs(k); int ans = 0; for (int _ = 0; _ < n; _++) { // it over rows for (int r = 0; r < k; r++) { //cout << "row " << r + 1 << '\n' while (sortedk[r][ptrs[r]].fi <= cur[r] && ptrs[r] < n) { vs[cnt[sortedk[r][ptrs[r]].se]].erase(vs[cnt[sortedk[r][ptrs[r]].se]].find(sortedk[r][ptrs[r]].se)); cnt[sortedk[r][ptrs[r]].se]++; vs[cnt[sortedk[r][ptrs[r]].se]].insert(sortedk[r][ptrs[r]].se); ptrs[r]++; } } if (vs[k].size()) { int x = *vs[k].rbegin(); vs[k].erase(x); add(cur, mds[x].se); ans++; } else break; } cout << ans << '\n'; } /* 5 1 0 0 5 6 0 1 5 1 1 1 0 0 0 8 2 0 7 7 7 8 1 4 */ void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } signed main() { ios::sync_with_stdio(false); cout.tie(0); cin.tie(0); //setIO(); int t = 1; if (tc) { cin >> t; } while (t--) { solve(); } }

Compilation message (stderr)

Main.cpp: In function 'void setIO(std::string)':
Main.cpp:101:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:102:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...