Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
水果。//============================================================================ // Name : main1065.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> using namespace std; int MAX_INT = 2147483647; class stick{ public: int l; int w; stick(int L, int W): l(L), w(W){} stick(): l(0), w(0){} }; bool operator>(stick& s1, stick& s2){ if(s1.l > s2.l) return true; if(s1.l < s2.l) return false; return s1.w >= s2.w; } int partion(stick *array, int p, int r) { stick x = array[r]; int i = p - 1;//注意这点,把i设成负值,然后作为移动的标志 int j; for (j = p; j < r; j++) { if (array[j] > x) { i++; stick temp = array[j]; array[j] = array[i]; array[i] = temp; } } stick temp = array[j]; array[j] = array[i + 1]; array[i + 1] = temp; return i+1;//返回的应该是交换后的哨兵的位置 } //递归解决每个划分后的小 void quickSort(stick *array, int p, int r) { if (p < r) { int q = partion(array, p, r); quickSort(array, p, q - 1); quickSort(array, q + 1, r); } } int main() { int cases; cin >> cases; for(int ii = 0; ii < cases; ii++){ int st; cin >> st; stick sticks[5000]; for(int i = 0; i < st; i++){ cin >> sticks[i].l >> sticks[i].w; } quickSort(sticks, 0, st-1); int mei = st; bool state[5000] = {false}; int res = 0; while(mei > 0){ int curL = MAX_INT, curW = MAX_INT; for(int i = 0; i < st; i++){ if(state[i]) continue; if(sticks[i].l <= curL && sticks[i].w <= curW){ state[i] = true; curL = sticks[i].l; curW = sticks[i].w; mei--; } } res++; } cout << res << endl; } //cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator