小朋友崇拜圈+灌溉(JAVA解法)

简介: 小朋友崇拜圈+灌溉(JAVA解法)


目录

小朋友崇拜圈

题目链接:

题目描述

输入描述

输出描述

输入输出样例

灌溉

题目链接:

题目描述

输入描述

输出描述

输入输出样例


小朋友崇拜圈

题目链接:

https://www.lanqiao.cn/problems/182/learning/?page=5&first_category_id=1&sort=students_count

题目描述

班里 N 个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。

在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。

求满足条件的圈最大多少人?

小朋友编号为 1,2,3,⋯N。

输入描述

输入第一行,一个整数 N(3<N<10^5)。

接下来一行 N 个整数,由空格分开。

输出描述

要求输出一个整数,表示满足条件的最大圈的人数。

输入输出样例

示例

输入

9
3 4 2 5 3 8 4 6 9

image.gif

输出

4

image.gif

样例解释

如下图所示,崇拜关系用箭头表示,红色表示不在圈中。

显然,最大圈是[2 4 5 3] 构成的圈。

image.gif编辑

代码:

import java.util.Scanner;
//1:无需package
//2: 类名必须Main, 不可修改
public class 小朋友崇拜圈 {
 public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
     int n = sc.nextInt();
     int[] a = new int[n + 1];
     for (int i = 1; i <= n; i++) {
         a[i] = sc.nextInt();
     }
     int maxl = 0;// 定义一个圈的最大长度
     for (int i = 1; i <= n; i++) {
         int len = dfs(a, i, 0);
         if (len > maxl) {
             maxl = len;
         }
     }
     System.out.println(maxl);
 }
 public static int dfs(int[] a, int i, int length) {
     int k = a[i];// 给定的第一个圈值开始找
     if (a[i] == k)// 和自己围圈就算1个长度
         length++;
     while (k != i) {
         k = a[k];// 寻找下一个圈
         length++;
         if (length > a.length)// 说明不能围成圈,直接运行终止
             return 0;
     }
     return length;
 }
}

image.gif

灌溉

题目链接:

https://www.lanqiao.cn/problems/551/learning/?page=5&first_category_id=1&sort=students_count

题目描述

小蓝负责花园的灌溉工作。

花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。

小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。

每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。

给定花园水管的位置,请问 kk 分钟后,有多少个方格被灌溉好?

输入描述

输入的第一行包含两个整数 n,m。

第二行包含一个整数 t,表示出水管的数量。

接下来 tt 行描述出水管的位置,其中第 ii 行包含两个数 r,c 表示第 r 行第 c 列有一个排水管。

接下来一行包含一个整数 k。

其中,1≤n,m≤100,1≤t≤10,1≤k≤100。

输出描述

输出一个整数,表示答案。

输入输出样例

示例 1

输入

3 6
2
2 2
3 4
1

image.gif

输出

9

image.gif

代码:

import java.util.LinkedList;
import java.util.Scanner;
public class 灌溉 {
    static int dx[] ={0,1,0,-1};
    static int dy[] = {1,0,-1,0};
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int v[][] = new int[n+1][m+1];
        int t = sc.nextInt();
        LinkedList<node> list = new LinkedList<>();
        for (int i = 0; i < t; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            v[a][b] = 1;
            list.add(new node(a,b,0));
        }
        int k = sc.nextInt();
        while (!list.isEmpty()){
            node p = list.poll();
            if (p.step==k)
                continue;
            for (int j = 0; j < 4; j++) {
                int tx = p.x+dx[j];
                int ty = p.y+dy[j];
                if (tx>0&&tx<=n&&ty>0&&ty<=m&&v[tx][ty]==0){
                    v[tx][ty] = 1;
                    list.add(new node(tx,ty,p.step+1));
                }
            }
        }
        int ans = 0;
        for (int i = 0; i < n+1; i++) {
            for (int j = 0; j < 1+m; j++) {
                if (v[i][j]==1){
                    ans++;
                }
            }
        }
        System.out.println(ans);
    }
}
class node{
    int x;
    int y;
    int step;
    public node(int x, int y, int step) {
        this.x = x;
        this.y = y;
        this.step = step;
    }
}

image.gif


星光不问赶路人,岁月不负有心人

相关文章
|
29天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
34 6
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
57 6
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
54 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
66 1
|
4月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
56 0
|
4月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
45 0
|
6月前
|
Java
杭电 OJ 1010-1019 Java解法(未更新完毕)
杭电 OJ 1010-1019 Java解法(未更新完毕)
29 1
|
6月前
|
Java
八皇后问题92种解法(java)
八皇后问题92种解法(java)
|
6月前
|
Java
杭电acm1201 18岁生日 Java解法 时间类
杭电acm1201 18岁生日 Java解法 时间类
31 0
|
6月前
|
算法 Java
杭电 OJ 1000-1009 Java解法
杭电 OJ 1000-1009 Java解法
26 0