ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Milking Cows /c++
    ALGORITHM/USACO 2019. 8. 11. 17:57
    728x90

    1. map으로 건들여 본다 -> 값이 중복된다

    2. multimap으로 건들여 본다. -> value를 정렬해줘야 한다

    3. set으로 건들여 본다 -> 값이 중복

    4. multiset으로 중복도 가능하고 값도 정렬해준다.

    #include <iostream>
    #include <set>
    #include <stack>
    using namespace std;
    
    int main() {
    	int N;
    	int answer1 = 0;
    	int answer1_x = 1<<30;
    	int answer2 = 0;
    	int answer2_x = 0;
    	int answer2_y = 0;
    	bool check = false;
    	multiset<pair<int,int>> m;
    	stack<int> stac;
    	
    	cin >> N;
    	for (int i = 0; i < N; i++) {
    		int a,b;
    		cin >> a>> b;
    		m.insert(pair<int, int>(a, 1)); // 시작
    		m.insert(pair<int, int>(b, 2));//끝
    	}
    	for (multiset<pair<int, int>> ::iterator iter = m.begin(); iter != m.end(); iter++) {
    		cout << iter->first << " " << iter->second << endl;
    		if (iter->second==1) {
    			stac.push(iter->first);
    			answer2_x = iter->first;
    			if (answer1_x > iter->first) {
    				answer1_x = iter->first;
    			}
    			if (check) {
    				if (answer2 < iter->first - answer2_y) {
    					answer2 = iter->first - answer2_y;
    				}
    				check = false;
    			}
    		}else {
    				stac.pop();
    				answer2_y = iter->first;
    				if (stac.empty()) {
    					if (answer1 < iter->first - answer1_x) {
    						answer1 = iter->first - answer1_x;
    					}
    					answer1_x = 1 << 30;
    					check = true;
    				}
    			
    		}
    	}
    	cout << answer1<<" "<<answer2<<endl;
    	return 0;
    }

    'ALGORITHM > USACO' 카테고리의 다른 글

    Solving USACO Name That Number problem in c++  (0) 2019.08.11
    Solving the usaco transform problem in c++  (0) 2019.08.11
    Broken Necklace /c++  (0) 2019.08.11
    Friday the Thirteenth /c++  (0) 2019.08.11
    Task 'gift1': Greedy Gift Givers /c++  (0) 2019.08.11

    댓글

Designed by Tistory.