您的位置:首页 > 其它

B

2016-03-21 08:59 309 查看
题目编号:B(1001)

题目大意:题意不是很难。有一堆木棒,它有长度和质量2个属性。首先放第一个木棒,需要一分钟,把其他的木棒排在它后面,当后面的木棒的长度和质量都在其之上时,不需                       要时间,否则需要额外加一分钟,要求把题目给的木棒都放在一起。求最小的时间。

解题思路:思路不是很难,一般的同学都可以想到的:首先创建个结构体数组,里面有3个属性,长度,质量和是否已用这个标记。创建结构体的时候记得重载一下小于号,为下                        面的排序函数做准备。准备工作好了然后就是主函数了:首先输入题目要给的数据,输入进数组中,并标记全部为未用,然后排序。后面就是2个循环体的嵌套了。具                        体解决的是:筛选一下前面的是否为已用,当已经被实用则外面的循环继续。否则进入下一个循环,目的是找到此长度和质量都比它大或者等于的,而且还未被用过的
                     木棒,找到了以后,把标记全部为已用。当然时间这个标量也要插在其中,考虑第一个的一分钟等等,这个不是很难。最后输出就行了。

解题感想:这个题目思路不是很难想,但细节需要把握准确的,我提交了多次才A,差点就暴走了。主要还是心态,细节决定成败!!!

#include<iostream>
#include<algorithm>
using namespace std;
struct group
{
int x;
int y;
int A;
bool operator<(const group &a)const{
if(x!=a.x)
{ return x<a.x;}
else
{ return y<=a.y;}
}
}G[5001];
int main()
{
int n,a,s;
int i,j,k;
cin>>n;
while(n--)
{
cin>>a;
for(i=0;i<a;i++)
{
cin>>G[i].x>>G[i].y;
G[i].A=0;
}
sort(G,G+a);
s=0;
for(i=0;i<a;i++)
{
if(G[i].A==0)
{
s++;
G[i].A=1;
k=G[i].y;
for(j=i+1;j<a;j++)
{
if(k<=G[j].y&&G[j].A==0)
{
G[j].A=1;
k=G[j].y;
}
}
}
}
cout<<s<<endl;
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  B