NYOJ题目1045看美女

--------------------------------------

开始的时候蠢蠢的使用直白的模拟:

 1 import java.util.Scanner;
 2
 3 public class Main {
 4
 5     public static void main(String[] args) {
 6
 7         Scanner sc=new Scanner(System.in);
 8
 9         int times=sc.nextInt();
10         while(times-->0){
11
12             int n=sc.nextInt();
13             int a[]=new int[n];
14             for(int i=0;i<a.length;i++) a[i]=sc.nextInt();
15
16             int ans=solve(a);
17             System.out.println(ans);
18         }
19     }
20
21     public static int solve(int a[]){
22         int res=0;
23         for(int i=0;i<a.length;i++) if(canSee(a,i)) res++;
24         return res;
25     }
26
27     public static boolean canSee(int a[],int i){
28         int t=i;
29         boolean ok=true;
30         while(--t>=0 && ok) if(a[t]>a[i]) ok=false;
31         if(ok) return true;
32
33         ok=true; t=i;
34         while(++t<a.length) if(a[t]>a[i]) ok=false;
35         if(ok) return true;
36
37         return false;
38     }
39
40 }

然后很不幸,TLE

然后想着分别从两侧扫描只记录最大值然后跟当前比较做标记位就可以了,这样子的话最多扫描两遍数组就可以了,效率还是蛮高的。

AC代码:

 1 import java.util.Scanner;
 2
 3 public class Main {
 4
 5     public static void main(String[] args) {
 6
 7         Scanner sc=new Scanner(System.in);
 8
 9         int times=sc.nextInt();
10         while(times-->0){
11
12             int n=sc.nextInt();
13             int a[]=new int[n];
14             for(int i=0;i<a.length;i++) a[i]=sc.nextInt();
15
16             int ans=solve(a);
17             System.out.println(ans);
18         }
19     }
20
21     public static int solve(int a[]){
22         boolean book[]=new boolean[a.length];
23
24         int max=a[0];
25         for(int i=0;i<a.length;i++){
26             if(!book[i] && a[i]>=max) book[i]=true;
27             max=Math.max(max,a[i]);
28         }
29
30         max=a[a.length-1];
31         for(int i=a.length-1;i>=0;i--){
32             if(!book[i] && a[i]>=max) book[i]=true;
33             max=Math.max(max,a[i]);
34         }
35
36         int res=0;
37         for(int i=0;i<book.length;i++) if(book[i]) res++;
38         return res;
39     }
40
41 }

题目来源: http://acm.nyist.net/JudgeOnline/problem.php?pid=1045

时间: 2024-11-05 06:27:27

NYOJ题目1045看美女的相关文章

关于大街上看美女这件事

很久以前,深受封建教育毒害的我一直以为看美女是件很不道德的事.一直到有天,我跟一个要好的妹子上街: "你觉得那妹子好看吗?" "好看" "那你怎么不看?" "那样不是很不礼貌吗?再说万一被当成流氓咋整" "sb,女生打扮就是为了人看的,只要不是太猥琐,一般知道有人看她,心里都在暗爽,不过你的话...确实有这个担心的必要" "..." 后来: "xx,你在看什么" &q

武汉科技大学ACM:1003: 看美女

Problem Description “排排站,赏美女……” YJ师兄在今年牡丹江赛区人品爆发,怒摘银奖,心情倍好,现组织大家去黄家湖边站成一排看美女 ^.^ N个人站成一排.不巧,美女们只在队伍的最左边和最右边,你们可以向左看或者向右看.如果第i个人向左看,当且仅当第i个人的身高h[i]>=h[j] ( j=1...i-1) 时,他能看到美女:如果第i个人向右看,当且仅当第i个人的身高h[i]>=h[j] (j=i+1..N)时,他能看见美女.已知N个人的身高,求最多有多少人能看到美女.

看美女(二)

看美女(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 “排排站,赏美女……”       N个人站成一排.不巧,美女们只在队伍的最左边和最右边,你们可以向左看或者向右看.如果第i个人向左看,当且仅当第i个人的身高h[i]>h[j] ( j=1...i-1) 时,他能看到美女:如果第i个人向右看,当且仅当第i个人的身高h[i]>h[j] (j=i+1..N)时,他能看见美女.已知N个人的身高,为了能让更多的人看到美女,你的任务是找出最好的站队方法,让最多的人

有趣的前端题目,看了不后悔

今天在前端群里面和群友讨论了一下几道自己遇过的前端题目,虽然是小题目,但是还是挺好玩.所以今天还是写下来,和大家分享一下. 1.一道大概4年前遇到的题目,知识点简单,但是新奇又好玩. 题目:有一个div 宽和高都是250px: 只要往div里面加任意的四个div,里面的div宽和高都会是原来50%,分别在左右上下:任意加div,就会向四个角延伸.同时,整个div是垂直水平居中浏览器. 如下图 图解:任意添加div,就分别向4个角延伸 下面是出代码,想试试的同学记得先不看代码啦. <!doctyp

NYOJ 题目915 +-字符串

题目描述: Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和它相邻的减号交换.他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串.你现在要去帮助他完成那个这个问题 输入 多组测试数据 每组数据有两行,每行包含一个由"+"和"-"最成的字符串.每个子符串长度不超过5000. 输出 仅一个整数,输出最少需要操作的次数.如果答案不存在,输出-1. 样例输入 ++-+--+ -++--++ 样例输出 4 #include&

有趣的前端题目,看了不懊悔

今天在前端群里面和群友讨论了一下几道自己遇过的前端题目.尽管是小题目,可是还是挺好玩.所以今天还是写下来,和大家分享一下. 1.一道大概4年前遇到的题目,知识点简单,可是新鲜又好玩. 题目:有一个div 宽和高都是250px. 仅仅要往div里面加随意的四个div,里面的div宽和高都会是原来50%.分别在左右上下:随意加div.就会向四个角延伸. 同一时候.整个div是垂直水平居中浏览器. 例如以下图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb

两则热门新闻,今天去GMIC看美女

GMIC2015上美女帅锅太多(看最后),已闪瞎眼,看点让你清心的.       12克机器人能拖动一条蓝色的大鲸鱼,人力真的会被取代 The Verge消息,斯坦福大学的工程师发明了一种微型机器人MicroTugs,它能够拉动和提升超过自身重量100倍的物品.其中最强的一款机器人自身重量仅为12克,却可以拉动比自己重2000倍的物品,这相当于一个人能够拖动一只蓝色的大鲸鱼. 工程师们还发明了可以攀爬墙壁的机器人,它的重量仅为9克,但是在墙壁上爬行时能够拖拽起重达一公斤的物品,这相当于一个人在大

NYOJ题目57 6174问题

----------------------------------------------------- 感觉这个OJ题目难度划分很不合理,这道理明明很简单却给了2的难度,而之前难度为0的水题有好多难死个人没做出来让我暗暗觉得自己脑子里都是屎... 把题目描述翻译成人话的意思就是多少次以后这个序列会出现,想明白这一点就比较简单了. AC代码: 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main

NYOJ题目1049自增自减

--------------------------------- 简单的字符判断. AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 Scanner sc=new Scanner(System.in); 8 9 int times=Integer.parseInt(sc.nextLine()); 10 while(times-->0