UVA11039-Building designing

Posted Persistent.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA11039-Building designing相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

UVa 11039 Building designing (贪心+排序+模拟)

一个角未连接的CSS矩形[重复]

2019年2月做题记录

uva是啥意思

通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)

UVa中国麻将(Chinese Mahjong,Uva 11210)