码迷,mamicode.com
首页 > 其他好文 > 详细

UVA11039-Building designing

时间:2017-07-15 16:49:55      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:repr   one   ant   uil   max   绝对值   present   maximum   represent   

Building designing

Time limit: 3.000 seconds

An architect wants to design a very high building. The building will consist of some ?oors, and each ?oor has a certain size. The size of a ?oor must be greater than the size of the ?oor immediately above it. In addition, the designer (who is a fan of a famous Spanish football team) wants to paint the building in blue and red, each ?oor a colour, and in such a way that the colours of two consecutive ?oors are di?erent. To design the building the architect has n available ?oors, with their associated sizes and colours. All the available ?oors are of di?erent sizes. The architect wants to design the highest possible building with these restrictions, using the available ?oors.
Input
The input ?le consists of a ?rst line with the number p of cases to solve. The ?rst line of each case contains the number of available ?oors. Then, the size and colour of each ?oor appear in one line. Each ?oor is represented with an integer between -999999 and 999999. There is no ?oor with size 0. Negative numbers represent red ?oors and positive numbers blue ?oors. The size of the ?oor is the absolute value of the number. There are not two ?oors with the same size. The maximum number of ?oors for a problem is 500000.
Output
For each case the output will consist of a line with the number of ?oors of the highest building with the mentioned conditions.
Sample Input
2

5

7

-2

6

9

-3

8

11

-9

2

5

18

17

-15

4
Sample Output
2

5

 

题意就是建楼,负数代表一种颜色,正数代表另一种颜色,要正负号交替且绝对值递增。

绝对值排序然后标记正负。

代码:

#include<bits/stdc++.h>
const int N=5*1e5+10;
using namespace std;
int a[N];
bool cmp(int a,int b){
    return abs(a)<abs(b);
}
int main(){
    int t,n,flag,num;
    while(~scanf("%d",&t)){
     while(t--){
        scanf("%d",&n);
        flag=0;num=0;
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
            sort(a,a+n,cmp);
            if(a[0]>0)flag=1;                     //这里一开始写错了,写成flag=1了。。。
            else flag=2;
            num++;
        for(int i=1;i<n;i++){
            if(flag==1){
                if(a[i]<0){flag=2;num++;}
            }
            else if(flag==2){
                if(a[i]>0){flag=1;num++;}
            }
        }
        printf("%d\n",num);
    }
    }
    return 0;
}

==

UVA11039-Building designing

标签:repr   one   ant   uil   max   绝对值   present   maximum   represent   

原文地址:http://www.cnblogs.com/ZERO-/p/7182909.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!