U E D R , A S I H C RSS

[Lovely]boy^_^/USACO/Mixing Milk

  • 이제 assert문 쓰는 법을 알아 가고 있다.
  • 훌륭한 프로그래머들의 습관을 따라 해보려 노력중이다.
  • 전문 프로그래머들은 assert문을 자주 쓴다고 한다.


~cpp 
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

ifstream fin("milk.in");
ofstream fout("milk.out");

void InputInitData(int& suf, int& numf, map<int,int>& data, vector<int>& numlist);
int Process(int& suf, int& numf, map<int,int>& data, vector<int>& numlist);
void OutputData(int& numf, map<int,int>& data, vector<int>& numlist);

int main()
{
	int numf, suf;
	map<int,int> data;
	vector<int> numlist;
	InputInitData(suf, numf, data, numlist);

	fout << Process(suf, numf, data, numlist) << endl;

	return 0;
}

void InputInitData(int& suf, int& numf, map<int,int>& data, vector<int>& numlist)
{
	fin >> suf;
	fin >> numf;

	int cost, amount;	
	for(int i = 0 ; i < numf ; ++i)
	{
		fin >> cost;
		fin >> amount;
		if(data[cost] == 0)
			numlist.push_back(cost);

		data[cost] += amount;
	}
	sort(numlist.begin(), numlist.end());
}

int Process(int& suf, int& numf, map<int,int>& data, vector<int>& numlist)
{
	int ret = 0;
	int until = 0;
	int whenstop = 0;
	for(int i = 0 ; i < numlist.size() ; ++i)
	{
		if(suf > until + data[numlist[i]])
		{			
			ret += numlist[i] * data[numlist[i]];
			until += data[numlist[i]];
		}
		else
		{
			whenstop = i;
			break;
		}
	}

	if(whenstop <  numlist.size())
		ret += numlist[whenstop] * (suf - until);
	return ret;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:37
Processing time 0.0122 sec