#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define f first
#define s second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define epb emplace_back
using namespace std;
const int nmax = 200001;
map <vector <int>, bool > mp;
vector <vector <int> > vv[1000001];
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
int n, k, c;
cin >> n >> k >> c;
int a[n + 1][k + 1];
int Ans = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= k; ++j)
cin >> a[i][j];
int mx = 0;
}
for(int j = 1; j <= k; j++){
int mx = 0;
for(int i = 1; i <= n; i++)
mx = max(mx, a[i][j]);
Ans += mx;
}
vv[Ans].pb({});
while(c--){
while(vv[Ans].empty() && Ans > 0) Ans--;
vector <int> o = vv[Ans].back();
/*for(int to : o){
cout << to << ' ';
}
cout << "\n";*/
vv[Ans].pop_back();
bool used[n + 1];
fill(used, used +n + 1, false);
for(auto to : o){
used[to] = true;
}
vector <vector <int> > vec(n + 1);
int mx[k + 1], mx1[k + 1];
int mxi[k + 1];
fill(mx, mx + k + 1, -1e9);
fill(mx1, mx1 + k + 1, -1e9);
fill(mxi, mxi + k + 1, -1e9);
for(int j = 1; j <= k; j++){
for(int i = 1; i <= n; i++){
if(used[i]) continue;
if(mx[j] < a[i][j]){
mxi[j] = i;
swap(mx[j], mx1[j]);
mx[j] = a[i][j];
}
else mx1[j] = max(mx1[j], a[i][j]);
}
vec[mxi[j]].pb(j);
}
int cnt = 0;
vector <int> cur;
for(int i = 1; i <= n; i++){
if(vec[i].empty()) continue;
cur.pb(i);
}
for(int j = 1; j <= n; j++){
if(cur.size() == k) break;
if(vec[j].empty() && !used[j]){
cur.pb(j);
}
}
for(int j : cur){
int Nans = Ans;
for(int to : vec[j]){
if(mx1[to] == -1e9) {
Nans = -1e9;
break;
}
Nans += mx1[to] - mx[to];
}
vector <int> no = o;
no.pb(j);
if(no.size() > n - k){
continue;
}
int ind = no.size() - 1;
while(ind > 0){
if(no[ind] > no[ind - 1])
swap(no[ind], no[ind - 1]),ind--;
else break;
}
if(Nans >= 0 && !mp[no])
vv[Nans].pb(no), mp[no] = true;
}
}
cout << Ans;
return 0;
}
Compilation message
olympiads.cpp: In function 'int main()':
olympiads.cpp:23:13: warning: unused variable 'mx' [-Wunused-variable]
23 | int mx = 0;
| ^~
olympiads.cpp:71:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
71 | if(cur.size() == k) break;
| ~~~~~~~~~~~^~~~
olympiads.cpp:87:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
87 | if(no.size() > n - k){
| ~~~~~~~~~~^~~~~~~
olympiads.cpp:64:13: warning: unused variable 'cnt' [-Wunused-variable]
64 | int cnt = 0;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
30 ms |
48084 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
31 ms |
48020 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
93 ms |
45392 KB |
Output is correct |
2 |
Correct |
69 ms |
34636 KB |
Output is correct |
3 |
Correct |
55 ms |
29132 KB |
Output is correct |
4 |
Correct |
60 ms |
33912 KB |
Output is correct |
5 |
Correct |
69 ms |
43148 KB |
Output is correct |
6 |
Correct |
20 ms |
25088 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
30 ms |
48084 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |