nyoj 236 心急的C小加
2015-07-24 16:31
232 查看
心急的C小加
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述
C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?
输入第一行是一个整数T(1<T<1500),表示输入数据一共有T组。
每组测试数据的第一行是一个整数N(1<=N<=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 < L ,W <= 10000),用一个空格隔开,分别表示木棒的长度和质量。输出处理这些木棒的最短时间。样例输入
3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1
样例输出
2 1 3
来源
POJ改编
//核心:对于这么多木头来说,要想最省时间 ,那就需要把它们分为几坨,没一坨的木头开一次机器;
//先将木头们按照长的大小排序,如果长相等的话,那么就按照重量大小排序 ,然后再遍历,遍历的开始让时间自增一个,
//利用双重循环遍历,遇到符合要求的木棍就自动分为一坨,然后将此木棍进行0标记,下次遍历时,遇到0就跳过
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct mb{//定义一个结构体,定义长和宽
int l,w;
}s[10001];//s是结构体名称
int cmp(mb x,mb y)
{
if(x.l<y.l)
return y.l-x.l;
if(x.l==y.l && x.w<y.w)
return y.w-x.w;
return 0;//如果都不符合,就返回0
}
int main()
{
int m;
scanf("%d",&m);
while(m--)
{
int n,i,count=0,j,t;
memset(s,0,sizeof(s));//数组清零
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d %d",&s[i].l,&s[i].w);
sort(s,s+n,cmp);//按照先按长排序,然后如果长度相等的话,就按照重量排序
for(i=0;i<n;i++)
{
if(s[i].w!=0) //如果不为零的话就继续判断
{
t=s[i].w;
count++;//凡是不为零的,一定是开始的最小的木头,所以开启一个时间
for(j=i+1;j<n;j++)
{
if(s[j].w>=t)
{
t=s[j].w;
s[j].w=0;//如果符合条件的话,就把这个东西的重量设为0,继续往后遍历的话,遇到零就跳过
}
}
}
}
printf("%d\n",count);
}
return 0;
}
相关文章推荐
- HDU 1151 Air Raid【最小路径覆盖】
- OC学习 description方法重写【入学准备】【学习笔记】
- 欧几里得算法
- Android 无障碍服务一 让应用具有辅助性服务
- 计算机网络热门问题
- 孤儿进程与僵尸进程
- CSDN在线公开课日历【十月】
- 表单元素input、button、submit、submit()、onsubmit()详解
- java 如何获取得到两个list中不同的数据
- 自己写一个快速开发android模板
- Python Network Programming
- 合服导致 globalserver 起不来的问题
- FreeSWITCH在会议室中持续播放音频文件
- Android笔记之四种方式实现计时器
- zoj1949
- [基本实验] %00截断攻击的探索
- Android学习笔记【一】Android学习感言(包含学习见解、学习方法)
- 【暴力搜索】[POJ 1011]Sticks
- java 执行Sql文件
- java学习笔记--Exception