This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mxnk=5e6+5,mxn=mxnk,mxk=mxnk;
int R[mxnk],U[mxnk];
int n,k;
#define r(i,j) R[i*k+j]
#define u(i,j) U[i*k+j]
int filled[mxn];//for each task, how many requirements fulfilled
int cur[mxk];//for each topic, current knowledge...
#define f first
#define s second
vector<pair<int,int> > reqs[mxk];//for each topic, store (requirement, task index)
int ind[mxk];//index of next req to hit in reqs...
int32_t main(){
ios_base::sync_with_stdio(false);cin.tie(0);
cin>>n>>k;
for(int i=0;i<n;i++){
for(int j=0;j<k;j++){
cin>>r(i,j);
reqs[j].emplace_back(r(i,j),i);
}
}
for(int j=0;j<k;j++)sort(reqs[j].begin(),reqs[j].end());
for(int i=0;i<n;i++){
for(int j=0;j<k;j++)cin>>u(i,j);
}
int ans=0;
vector<int>nex;
bool can=1;
while(can){
can=0;
for(int j=0;j<k;j++){
while(ind[j]<n && reqs[j][ind[j]].f<=cur[j]){
filled[reqs[j][ind[j]].s]++;
if(filled[reqs[j][ind[j]].s]==k){
// nex.push_back(reqs[j][ind[j]].s);
// int x=reqs[j][ind[j]].s;
for(int jj=0;jj<k;jj++){
cur[jj]+=u(reqs[j][ind[j]].s,jj);
}
ans++;
can=1;
}
ind[j]++;
}
}
// if(nex.size()==0)break;
// while(nex.size()>0){
// }
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |