#include <cstdlib>
#include <iostream>
using namespace std;
struct node{
int len, wt;
node* nxt;
};
node* list=NULL;
void Insert(node* lst, int l, int w)
{
node *p=lst, *q=p->nxt;
while(q && (q->len < l || q->len == l && q->wt < w) )
{
p = q;
q=q->nxt;
}
p->nxt = new node;
p->nxt->wt = w; p->nxt->len = l;
p->nxt->nxt = q;
}
void DeleteAfter(node* p)
{
node* q = p->nxt;
p->nxt = q->nxt;
delete q;
}
void Free(node* lst)
{
node* p=lst->nxt;
while(p)
{
list->nxt = p->nxt;
delete p;
p = list->nxt;
}
}
void Input()
{
int n, w, l;
cin>>n;
for (int i=0; i<n; i++)
{
cin>>l>>w;
Insert(list, l, w);
}
}
int Find()
{
node*p = list, *q;
int cnt = 0, w, l;
while(p->nxt)
{
cnt++;
w = p->nxt->wt;
l = p->nxt->len;
for (q = p->nxt; q; )
{
if (q->wt >= w && q->len >=l)
{
w = q->wt; l = q->len;
DeleteAfter(p);
q = p->nxt;
}
else
{
p = q; q=q->nxt;
}
}
p = list;
}
return cnt;
}
void Print(node* lst)
{
for(node* p = lst->nxt; p; p=p->nxt)
cout<<p->len<<" "<<p->wt<<" "<<endl;
}
int main(int argc, char *argv[])
{
list = new node;
list->nxt = NULL;
int t;
cin>>t;
for (int i=1; i<=t; i++)
{
Input();
//Print(list);
cout<<Find()<<endl;
//Free(list);
}
}
ZOJ 1025 Wooden sticks
最新推荐文章于 2009-09-10 13:27:00 发布