B

来源:互联网 发布:程序员论坛排名 编辑:程序博客网 时间:2024/04/27 14:24

题目编号: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;}

0 0
原创粉丝点击