답안 #201598

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
201598 2020-02-11T11:13:11 Z Shelby 학교 설립 (IZhO13_school) C++11
20 / 100
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]);
     ~~~~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 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