我的心愿是世界和平!
栈
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int>s;//创造一个栈.
s.push(1);//添加栈顶元素.
s.push(2);
s.push(3);
cout<<s.size()<<endl;//获得队列大小.
while(!s.empty())//判断栈是否为空,如果是,返回1;如果不是,返回0.
{
cout<<s.top()<<endl;//返回栈顶元素.
s.pop();//删除栈顶元素.
}
}
队列
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>q;//创造一个队列.
q.push(1);//添加队尾元素.
q.push(2);
q.push(3);
cout<<q.size()<<endl;//获得队列大小.
while(!q.empty())//判断队列是否为空,如果是,返回1;如果不是,返回0.
{
cout<<q.front()<<endl;//返回队头元素.
q.pop();//删除队头元素.
}
return 0;
}
双端队列
#include<iostream>
#include<deque>
using namespace std;
int main()
{
deque<int>d;//创建一个双端队列.
deque<int>de;
d.push_back(40);//添加队尾元素.
d.push_back(50);
d.push_back(60);
for(int i=0;i<d.size();i++)//获得队列大小.
{
cout<<d.at(i)<<endl;//输出队列中第(i+1)个元素.
}
cout<<endl;
d.push_front(30);//添加队头元素.
d.push_front(20);
d.push_front(10);
for(int i=0;i<d.size();i++)
{
cout<<d.at(i)<<endl;
}
cout<<endl;
d.pop_front();
d.pop_back();
for(int i=0;i<d.size();i++)
{
cout<<d.at(i)<<endl;
}
cout<<endl;
if(d.empty()==1)//判断队列是否为空,如果是,返回1;如果不是,返回0.
cout<<"kong"<<endl;
else
cout<<"feikong"<<endl;
cout<<endl;
d.resize(3);//重新制定队列的长度,从队尾删除多余元素.
for(int i=0;i<d.size();i++)
{
cout<<d.at(i)<<endl;
}
cout<<endl;
de.push_back(21);
de.push_back(31);
de.push_back(41);
de.swap(d);//把d和de中的元素互换.
for(int i=0;i<de.size();i++)
{
cout<<de.at(i)<<endl;
}
cout<<endl;
for(int i=0;i<d.size();i++)
{
cout<<d.at(i)<<endl;
}
cout<<endl;
cout<<d.front()<<endl;//返回队头元素.
cout<<d.back()<<endl;//返回队尾元素.
cout<<endl;
d.clear();
de.clear();
if(d.empty()==1)
cout<<"kong"<<endl;
else
cout<<"feikong"<<endl;
return 0;
}
优先队列
#include<iostream>
#include<queue>
#include<vector>
#include<cstdio>
using namespace std;
struct cmp{
int data;
friend bool operator<(cmp x,cmp y)
{
return x.data>y.data;
}
}stu;
int main()
{
priority_queue<int,vector<int>,greater<int> >p;//创造一个从小到大的队列.
priority_queue<int,vector<int>,less<int> >q;//创造一个从大到小的队列.
p.push(1);p.push(7);p.push(5);
q.push(1);q.push(7);q.push(5);
while(!p.empty())
{
printf("%d ",p.top());
p.pop();
}
cout<<endl;
while(!q.empty())
{
printf("%d ",q.top());
q.pop();
}
cout<<endl;
//大部分同队列.
priority_queue<cmp>s;//创造一个从小到大的队列.
stu.data=1;
s.push(stu);
stu.data=7;
s.push(stu);
stu.data=5;
s.push(stu);
while(!s.empty())
{
printf("%d ",s.top().data);
s.pop();
}
}
1796-I
题目来源:http://acm.sdibt.edu.cn:8080/vjudge/contest/view.action?cid=1796#problem/I
清洗工作,给定区间,求至少需要多少奶牛参加工作。
思路:左端固定,找右端最大值。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct cow
{
int a;
int b;
} s[25010];
int cmp(const void *a,const void *b)
{
struct cow *x=(cow *)a;
struct cow *y=(cow *)b;
if(x->a==y->a)
return x->b-y->b;
return x->a-y->a;
}
int main()
{
int m,n,i;
scanf("%d%d",&m,&n);
for(i=0; i<m; i++)
scanf("%d%d",&s[i].a,&s[i].b);
qsort(s,m,sizeof(s[0]),cmp);
if(s[0].a!=1)
printf("-1");
else
{
int sum=1,t,k;
t=s[0].b;
i=1;
while(t<n)
{
k=t+1;
while(i<m)
{
if(s[i].a<=k&&s[i].b>=k)
if(t<s[i].b)
t=s[i].b;
if(s[i].a>k)
break;
i++;
}
if(k>t)
break;
sum++;
}
if(t==n)
printf("%d",sum);
else
printf("-1");
}
return 0;
}
1799-D
题目来源:http://acm.sdibt.edu.cn:8080/vjudge/contest/view.action?cid=1799#problem/D
结构体自定义优先队列。
#include<iostream>
#include<algorithm>
#include<deque>
#include<stack>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdlib>
using namespace std;
struct cow{
int min;
int max;
int num;
int home;
}co[50010];
int cmp(const void *x,const void *y)
{
struct cow *a=(cow *)x;
struct cow *b=(cow *)y;
return a->min-b->min;
}
int cm(const void *x,const void *y)
{
struct cow *a=(cow *)x;
struct cow *b=(cow *)y;
return a->num-b->num;
}
struct pai{
int shu;
int t;
friend bool operator<(pai x,pai y)
{
return x.shu>y.shu;
}
}pa;
int main()
{
int m,i,t=0;
scanf("%d",&m);
priority_queue<pai>p;
for(i=0;i<m;i++)
{
scanf("%d%d",&co[i].min,&co[i].max);
co[i].num=i;
}
qsort(co,m,sizeof(co[0]),cmp);
t++;
pa.shu=co[0].max+1;
pa.t=t;
p.push(pa);
co[0].home=1;
for(i=1;i<m;i++)
{
if(co[i].min>=p.top().shu)
{
co[i].home=p.top().t;
p.pop();
pa.shu=co[i].max+1;
pa.t=co[i].home;
p.push(pa);
}
else
{
co[i].home=++t;
pa.shu=co[i].max+1;
pa.t=t;
p.push(pa);
}
}
qsort(co,m,sizeof(co[0]),cm);
printf("%d\n",t);
for(i=0;i<m;i++)
{
printf("%d\n",co[i].home);
}
}