ZOJ4107试了好久还是WA

无她无命 2019-09-06 02:13:33
import java.util.Scanner;
import java.io.*;
public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int cases = sc.nextInt();
int[] result = new int[cases];
for(int n = 0; n < cases; n++){
short m = (short)sc.nextInt();
int[] song = new int[m];
for (int i = 0; i < m; i++){
song[i] = sc.nextInt();
}
int ncrack = 0;
for (int i = 1; i < m-1; i++)
if (song[i] > song[i-1] && song[i] > song[i+1]) {ncrack++;}
int min = ncrack;
if (m <= 3 || ncrack == 0) min = 0;
else{
for (int i = 0; i < m; i++){
int[] new_song = new int[m-1];
int new_ncrack = 0;
for (int j = 0; j < m-1; j++){
if(j<i) new_song[j] = song[j];
else new_song[j] = song[j+1];
}
for (int j = 1; j < m-2; j++){
if (new_song[j] > new_song[j-1] && new_song[j] > new_song[j+1]) {new_ncrack++;}
}
if (new_ncrack < min) min = new_ncrack;
}
}
result[n] = min;
}
for (int i = 0; i < cases; i++) System.out.println(result[i]);
sc.close();
}

}

小弟最近刚刚开始做ZOJ,今天就遇到问题了,题目是ZOJ4107 singing everywhere https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370502
在网上看到大家的做法都是带有一点数学的解法,那为什么我这种纯暴力枚举法结果会是wrong answer呢?我在本地测试了一些数据输出也都是正确的
...全文
92 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
无她无命 2019-09-06
  • 打赏
  • 举报
回复
引用 1 楼 zx_love 的回复:
short m = (short)sc.nextInt();
short大小不够,输入的数会比short大(10^5);
暴力也可以优化一下:第二步计算new_ncrack,不用复制数组,遍历原来的数组就行,删除i,判断一下i+1是不是峰值

天哪感谢大哥 本来改这个short是为了解决内存溢出,没想到还是不够,最后我简化了判断算法,内存不溢出了又超时了,最后加了输入输出挂才过,感谢
zx_love 2019-09-06
  • 打赏
  • 举报
回复
short m = (short)sc.nextInt();
short大小不够,输入的数会比short大(10^5);
暴力也可以优化一下:第二步计算new_ncrack,不用复制数组,遍历原来的数组就行,删除i,判断一下i+1是不是峰值

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧