uva 11039 - Building designing

点击打开链接uva 11039


思路:贪心排序+枚举)
分析:
1 题目要求按照题目给定的数据求能够建立最高几层的楼房
2 题目要求上层的大小要比下层小,并且两层之间的颜色要交替的出现。很明显,我们只要按照size进行排序,然后枚举即可。

代码:


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 500010;
int n , Case;
struct floor{
    int color;
    int size;
    bool operator<(const floor &fl)const{
        return size > fl.size;
    }
};
floor f[MAXN];

int main(){
    scanf("%d" , &Case);
    while(Case--){
        scanf("%d" , &n);
        for(int i = 0 ; i < n ; i++){
           scanf("%d" , &f[i].color);
           f[i].size = abs(f[i].color);
        }
        sort(f , f+n);
        int ans , preSize , preColor;
        ans = 1;
        preSize = f[0].size;
        preColor = f[0].color;
        for(int i = 1 ; i < n ; i++){
           if(f[i].color > 0){
              if(preColor < 0){
                 ans++;
                 preColor = f[i].color;
              }
           }
           else{
              if(preColor > 0){
                 ans++;
                 preColor = f[i].color;
              }
           }
        }
        printf("%d\n" , ans);
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值