心急的小C加
来源:互联网 发布:2016年网络大电影数据 编辑:程序博客网 时间:2024/05/21 17:36
题目
心急的C小加
- 描述
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
- 样例输出
213
- 来源
- POJ改编
- 上传者
陈玉
心得:将木棒按长度排序,如果相同,按重量排序;依次往后遍历,长度和重量都大于前一根木棒的木棒放一起,依次处理。主要问题是排序的过程中,如果用选择法之类的会超时,所以用到c/c++中的sort()函数,此处序自定义。
代码<c/c++>:
#include<stdio.h>
#include<string.h>//memset(a,0,sizeof(a));头文件
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXSIZE 10001//结构体,包含长度和重量
int L;
struct Stick{
int L;
int W;
}a[MAXSIZE];//自定义的比较函数
bool cmp(Stick x,Stick y){
if(x.L!=y.L) return x.L<y.L;
return x.W<y.W;
}//主函数
int main()
{
int T,N,L,W,i=0,j,counter=0,t;
scanf("%d",&T);
while(T--){
memset(a,0,sizeof(a)); //首先需要将数组清零
scanf("%d",&N);
//输入木棒信息
for(i=0;i<N;i++){
scanf("%d%d",&a[i].L,&a[i].W);
}
//排序
sort(a,a+N,cmp);
//计算时间
for(i=0;i<N;i++){
if(a[i].W!=0){//去掉已经处理过的木棒
t=a[i].W;
counter++;//刚使用机器的时候消耗一个单位时间,每轮消耗一个单位时间
for(j=i+1;j<N;j++){
if(a[j].W>=t){//下一个的长度一定比前一根木棒长,现要求重量也比前一个重的木棒
t=a[j].W;//最新处理掉的用来与后一根比较
a[j].W=0;//将已经处理过的用0标记,不再处理
}
}
}
}
cout<<counter<<endl;
counter=0;//初始化}
return 0;
}AC情况:
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的C小加
- 心急的c小加
- 心急的C小加
- 文件下载和名称乱码
- Memcached基础
- 剑指offer之七---跳台阶
- 分布式以客户为中心的一致性
- 一、jQuery选择器
- 心急的小C加
- jquery中的ajax使用
- new模拟实现
- shiro集成OAuth2学习体会
- Linux进程调度算法,不同的调度策略、实时性,完全公平调度算法CFS
- Java 位运算(移位、位与、或、异或、非)
- 2017招新笔试题解
- [MYSQL -26]控制事务处理
- %5B%5D jquery param 数据参数序列化