Southern Subregion Problem I. Plugs and Sockets

来源:互联网 发布:软件开发收费 编辑:程序博客网 时间:2024/06/01 13:54
模拟 读题真的是
#include<bits/stdc++.h>using namespace std;vector<pair<int,int> >v1;// Berland vector<pair<int,int> >v2;// Beuropean vector<pair<int,int> >v3;// allvector<pair<int,int> >ans1;vector<pair<int,int> >ans2;int n,a,b,t,rem=0;long long powe=0;int main(){//freopen("C://Users//Duhao//Desktop//in.txt","r",stdin);scanf("%d%d%d",&n,&a,&b);for(int i=1;i<=n;i++){scanf("%d",&t);if(t==1){scanf("%d",&t);v1.push_back(make_pair(t,i));}else if(t==2){scanf("%d",&t);v2.push_back(make_pair(t,i));}else {scanf("%d",&t);v3.push_back(make_pair(t,i));}}sort(v1.begin(),v1.end());sort(v2.begin(),v2.end());sort(v3.begin(),v3.end());int siz=v1.size();//cout<<siz<<endl;if(siz<=a){rem+=a-siz;for(int i=0;i<siz;i++){powe+=v1[i].first;    ans1.push_back(v1[i]);}}else {for(int i=0;i<a;i++){powe+=v1[i].first;    ans1.push_back(v1[i]);}}siz=v2.size();if(siz<=b){rem+=b-siz;for(int i=0;i<siz;i++){powe+=v2[i].first;    ans2.push_back(v2[i]);}}else {for(int i=0;i<b;i++){powe+=v2[i].first;    ans2.push_back(v2[i]);}}int all=0;siz=v3.size();if(rem>0){if(siz<=rem){//cout<<"dsad"<<endl;int siza=ans1.size(),i=0;int sizb=ans2.size();for(i=0;i<siz&&siza<a;i++){powe+=v3[i].second; ans1.push_back(v3[i]);siza++;all++;}for(;i<siz&&sizb<b;i++){powe+=v3[i].second; ans2.push_back(v3[i]);sizb++;all++;}}else {int siza=ans1.size(),i=0;int sizb=ans2.size();for(i=0;i<rem&&siza<a;i++){powe+=v3[i].second; ans1.push_back(v3[i]);siza++;all++;}for(;i<rem&&sizb<b;i++){powe+=v3[i].second; ans2.push_back(v3[i]);sizb++;all++;}}}//cout<<all<<endl;int siza=ans1.size();int sizb=ans2.size();for(int i=all;i<siz;i++){int minm1=0,wh1=0,minm2=0,wh2=0;for(int j=0;j<siza;j++){if(ans1[j].first-v3[i].first>minm1){minm1=ans1[j].first-v3[i].first;wh1=j;}}for(int j=0;j<sizb;j++){if(ans2[j].first-v3[i].first>minm2){minm2=ans2[j].first-v3[i].first;wh2=j;}}//cout<<minm1<<" "<<minm2<<endl; if(minm1>=minm2){if(minm1>0){powe-=minm1;    ans1[wh1]=v3[i];}}else if(minm2>=minm1){if(minm2>0){powe-=minm2;    ans2[wh2]=v3[i];}}}cout<<siza+sizb<<" "<<powe<<endl;for(int i=0;i<siza;i++){cout<<ans1[i].second<<" "<<i+1<<endl;}for(int i=0;i<sizb;i++){cout<<ans2[i].second<<" "<<i+a+1<<endl; }}

0 0
原创粉丝点击