NYOJ-看美女

本文解析了一道有趣的算法题目,题目要求计算站在海滩排成一排的人中最多有多少人可以看到两边的美女。通过找到队伍中最高的人并分别从其位置向左右检查,可以确定能看到美女的人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看美女
时间限制: 1000ms内存限制: 128000KB 64位整型:      Java 类名:
上一题  提交  运行结果  统计   讨论版  下一题
类型: 
没有


   添加
题目描述
“排排站,赏美女……”
       Fujun师兄在今年南京赛区人品爆发,怒摘银奖,心情倍好,现组织大家去海边站成一排看美女 ^.^
       N个人站成一排。不巧,美女们只在队伍的最左边和最右边,你们可以向左看或者向右看。如果第i个人向左看,当且仅当第i个人的身高h[i]>=h[j] ( j=1...i-1) 时,他能看到美女;如果第i个人向右看,当且仅当第i个人的身高h[i]>=h[j] (j=i+1..N)时,他能看见美女。已知N个人的身高,求最多有多少人能看到美女。
输入
先输入一个数T 表T组
每组数据: 第一行 N。N<=100 000
第二行 N个整数, 1<=h<=20000
  
输出
输出答案 换行。
样例输入
1
5
1 4 7 6 2
样例输出
5
来源

NYOJ


题解:

先找到该排数的最大值,然后分别往左边和右边查看,记录下合格的。

#include<stdio.h>
int a[20001];
int main()
{
    int n,N;
    scanf("%d",&N);
    while(N--)
    {
        int q,max=0;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            if(max<a[i])
            {
                q=i,max=a[i];
            }
        }
        int sum=1;
        for(int i=q-1; i>=0; i--)
        {
            int f=1;
            for(int j=0; j<i; j++)
            {
                if(a[j]>a[i])
                {
                    f=0;
                    break;
                }
            }
            if(f) sum++;
        }
        for(int i=q+1; i<n; i++)
        {
            int f=1;
            for(int j=n-1; j>i; j--)
            {
                if(a[j]>a[i])
                {
                    f=0;
                    break;
                }
            }
            if(f) sum++;
        }
        printf("%d\n",sum);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值