数据结构set:POJ1065--Wooden Sticks

来源:互联网 发布:建行支票打印软件 编辑:程序博客网 时间:2024/05/17 16:12

set是一种平衡二叉树结构,可以快速查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系。本题中利用set插入数值可以由小到大的顺序存储和方便删除的特点,每次将符合条件的木枝删除,set中元素为空则结束。原题链接

#include <iostream>#include <set>using namespace std;typedef pair<int,int> P;int main(){    int n;    cin>>n;    while(n--){        int num,l,w;        set<P> sett;        cin>>num;        while(num--) {            cin>>l>>w;            sett.insert(P(l,w));    ///set是数的结构,存入时已经按照由大到小的顺序存储了        }        int cnt=0;        set<P>::iterator it,it1;        while(!sett.empty()){            int mw=0;            for(it=sett.begin();it!=sett.end();)                if(it->second>=mw) {                        mw=it->second;    ///保存当前w                        it1=it;it1++;                        P tmp=P(it1->first,it1->second);    ///保存下一个元素                        sett.erase(it);    ///此时sett集合的结构已经发生变化,不可it++获得下一个元素                        it=sett.find(tmp);    ///寻找下一个元素                }                else it++;            cnt++;        }        cout<<cnt<<endl;    }    return 0;}


0 0
原创粉丝点击