# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
201598 |
2020-02-11T11:13:11 Z |
Shelby |
Schools (IZhO13_school) |
C++11 |
|
2000 ms |
18560 KB |
#include <bits/stdc++.h>
#define MAXN 300005
using namespace std;
typedef long long ll;
int a[MAXN],b[MAXN];
bool taken[MAXN];
set<pair<int,int>,greater<pair<int,int> > > mm;
set<pair<int,int>,greater<pair<int,int> > > ss;
set<int> tt;
vector< pair<int,int> > poma;
vector< pair<int,int> > pomb;
vector<int> not_taken;
int main()
{ int m,n,s,i,cnt=0,p;
long long sol=0;
scanf("%d%d%d",&n,&m,&s);
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
poma.push_back( {a[i],i} );
pomb.push_back( {b[i],i} );
}
sort(poma.begin(),poma.end(),greater<pair<int,int> >());
sort(pomb.begin(),pomb.end(),greater<pair<int,int> >());
for(i=0;i<m;i++)
{
int tmp=poma[i].second;
sol+=(ll)a[tmp];
taken[tmp]=true;
mm.insert( { b[tmp]-a[tmp] , tmp } );
}
for(i=0;i<n;i++)
{
int tmp=pomb[i].second;
if(taken[tmp]==false && cnt<s)
{
cnt++;
sol+=(ll)b[tmp];
taken[tmp]=true;
ss.insert( { a[tmp]-b[tmp] , tmp } );
}
if(taken[tmp]==false && cnt>=s) not_taken.push_back(a[tmp]);
}
bool ok=true;
while(ok)
{
pair<int,int> k=*mm.begin(); pair<int,int> l=*ss.begin();
if((k.first+l.first)>0 || ( ((k.first+l.first)==0) && a[k.second]>a[l.second]) )
{
mm.erase(mm.begin()); ss.erase(ss.begin());
mm.insert( { -l.first,l.second } );
ss.insert( { -k.first,k.second } );
sol+=(ll)k.first+(ll)l.first;
}
else ok=false;
}
for(auto it=mm.begin();it!=mm.end();++it)
{
pair<int,int> tmp=*it;
tt.insert(a[tmp.second]);
}
sort(not_taken.begin(),not_taken.end(),greater<int>());
p=0;
ok=true;
while(ok && p<not_taken.size() && !tt.empty())
{
int kk=*tt.begin();
if(kk<not_taken[p])
{
tt.erase(tt.begin());
sol+=(ll)not_taken[p]-(ll)kk;
p++;
}
else ok=false;
}
printf("%lld\n",sol);
return 0;
}
Compilation message
school.cpp: In function 'int main()':
school.cpp:96:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while(ok && p<not_taken.size() && !tt.empty())
~^~~~~~~~~~~~~~~~~
school.cpp:20:6: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&n,&m,&s);
~~~~~^~~~~~~~~~~~~~~~~~~
school.cpp:24:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&a[i],&b[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
248 KB |
Output is correct |
2 |
Execution timed out |
2080 ms |
256 KB |
Time limit exceeded |
3 |
Correct |
5 ms |
376 KB |
Output is correct |
4 |
Incorrect |
5 ms |
376 KB |
Output isn't correct |
5 |
Incorrect |
5 ms |
380 KB |
Output isn't correct |
6 |
Incorrect |
5 ms |
376 KB |
Output isn't correct |
7 |
Incorrect |
8 ms |
504 KB |
Output isn't correct |
8 |
Correct |
10 ms |
888 KB |
Output is correct |
9 |
Incorrect |
10 ms |
888 KB |
Output isn't correct |
10 |
Incorrect |
9 ms |
888 KB |
Output isn't correct |
11 |
Incorrect |
8 ms |
636 KB |
Output isn't correct |
12 |
Incorrect |
8 ms |
632 KB |
Output isn't correct |
13 |
Incorrect |
41 ms |
3688 KB |
Output isn't correct |
14 |
Incorrect |
60 ms |
4064 KB |
Output isn't correct |
15 |
Incorrect |
108 ms |
6224 KB |
Output isn't correct |
16 |
Correct |
214 ms |
13656 KB |
Output is correct |
17 |
Incorrect |
253 ms |
15056 KB |
Output isn't correct |
18 |
Incorrect |
252 ms |
15056 KB |
Output isn't correct |
19 |
Incorrect |
283 ms |
16340 KB |
Output isn't correct |
20 |
Incorrect |
346 ms |
18560 KB |
Output isn't correct |