• 牛客2018.6模拟考编程题


    emmm,今天的题目不知道怎么评价,感觉不难但是可能是太菜了,感觉时间不够and测试数据有点?emm异常。。

    • 1.牛牛玩牌

      题目如上,比较前三张的大小,模拟前者大于后者的可能数。样例没看懂。。0.3905*45*46是808.3,我模拟出来的可能数是807。(等牛客把模拟编程题再补这题吧)。

    • 2.牛牛数星星

    看到m,n<=10w就把撸到一半的暴力扔一边了,思考了一下可以用一个二维数组dp[i][j]存储从(1,1)到(i,j)的矩阵内有多少数据,预处理输入dp[i][j] = dp[i-1][j]+add(add是a[i][1]到a[i][j]有多少星星数,预处理复杂度最大o(10w))

    然后在a1,b1;a2,b2中的星星数为dp[x2][y2] -dp[x2][y1-1] -dp[x1-1][y2] + dp[x1-1][y1-1];

    大概是这么个意思,总觉得是测试数据有问题,比如a1<a2<=1000这个条件没满足之类的。。过了50%,同上,等题再放出来再补。

    • 3.牛牛走迷宫

    没想到这是最简单的一题,裸的bfs求最短路径即可。也是今晚唯一ac的一题。代码如下:

     1     public static void main(String[] args) {
     2         Scanner in = new Scanner(System.in);
     3         while (in.hasNextInt()) {// 注意while处理多个case
     4             int n = in.nextInt();
     5             int res = 0;
     6             int size = 0;
     7             char[][] maze = new char[n][n];
     8             char[] copy;
     9             int dir[][] = {{0,1},{1,0},{-1,0},{0,-1}};
    10             Queue<Point> queue = new LinkedList<>();
    11             Point gate = null;
    12             for(int i = 0;i<n;i++){
    13                 copy = in.next().toCharArray();
    14                 for(int j = 0;j<n;j++){
    15                     maze[i][j] = copy[j];
    16                     if(maze[i][j] == '*'){
    17                         gate = new Point(i,j);
    18                     }
    19                 }
    20             }
    21             //bfs搜索搜到就退出
    22             queue.offer(gate);
    23             size = 1;
    24             int nexti,nextj;
    25             boolean goal = false;
    26             while(!queue.isEmpty()){
    27                 Point next = queue.poll();
    28                 for(int i = 0;i<dir.length;i++){
    29                     nexti = next.x + dir[i][0];
    30                     nextj = next.y + dir[i][1];
    31                     if(nexti >=0 && nexti<n && nextj >=0&&nextj<n){
    32                         if(maze[nexti][nextj] == '.'){//
    33                             queue.offer(new Point(nexti, nextj));
    34                             maze[nexti][nextj] = '#';//走过的不能再走,bfs保证每次走到的位置都是最短的步数
    35                         }else if(maze[nexti][nextj] == '@'){//搜到就退出并且提前把res+1
    36                             res++;
    37                             goal = true;
    38                             break;
    39                         }
    40                     }
    41                 }
    42                 if(goal){
    43                     break;
    44                 }
    45                 if(--size == 0){//如果第res步不能走到入口,记录下一次能走到的size
    46                     res++;
    47                     size = queue.size();
    48                 }
    49             }
    50             System.out.println(res);
    51         }
    52     }
    53     static class Point{//坐标
    54         int x;
    55         int y;
    56         public Point(int x1,int y1) {
    57             x = x1;
    58             y = y1;
    59         }
    60     }

    总结的话,还是太菜,这种有时限的题带来的压力还是能让我不断提高的,还是得继续刷题补题。

  • 相关阅读:
    js动态给对象添加事件
    JavaScript中提供获取HTML元素位置的属性:
    javascript:是什么意思
    Vector与ArrayList区别
    Java核心类库——集合的迭代(遍历) Iterator接口
    实例1(文字的放大缩小)
    基本控件的使用
    关于Android那些事
    初识Android
    JavaScript(Two)
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9185331.html
Copyright © 2020-2023  润新知