/*
ID: ahshenb1
PROG: milk
LANG: C++
*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void swap(int *a,int *b)
{
int tmp1,tmp2;
tmp1 = a[0];a[0]=b[0];b[0]=tmp1;
tmp2 = a[1];a[1]=b[1];b[1]=tmp2;
}
int divide(int **array,int low,int high)
{
int k = array[low][0];
do
{
while(low<high&&array[high][0]>=k) --high;
if(low<high)
{
swap(array[low],array[high]);
++low;
}
while(low<high&&array[low][0]<=k) ++low;
if(low<high)
{
swap(array[low],array[high]);
--high;
}
}while(low!=high);
array[low][0] = k;
return low;
}
void quicksort(int **array,int low,int high)
{
int mid;
if(low>=high) return;
mid = divide(array,low,high);
quicksort(array,low,mid-1);
quicksort(array,mid+1,high);
}
void quicksort(int **array,int n)
{
quicksort(array,0,n-1);
}
int main()
{
ifstream fin("milk.in");
ofstream fout("milk.out");
int milknum;
int n;
fin>>milknum>>n;
int **man;
man = new int*[n];
for(int i=0;i<n;++i)
{
man[i]=new int[2];
fin>>man[i][0]>>man[i][1];
}
quicksort(man,n);
// for(int i =0;i<n;++i)
// cout<<man[i][0]<<" "<<man[i][1]<<endl;
int fee =0;
int k;
for(k =0;k<n;++k)
{
milknum-=man[k][1];
if((milknum>0)){
fee+=(man[k][0])*(man[k][1]);
}
else
break;
// cout<<(man[k][0])*(man[k][1])<<" "<<milknum<<" "<<fee<<endl;
}
milknum=milknum+man[k][1];
while(milknum>0)
{
milknum--;
fee+=man[k][0];
}
fout<<fee<<endl;
fin.close();
fout.close();
return 0;
}
【USACO】milk
最新推荐文章于 2022-07-27 21:09:48 发布