目录
小朋友崇拜圈
题目链接:
题目描述
输入描述
输出描述
输入输出样例
灌溉
题目链接:
题目描述
输入描述
输出描述
输入输出样例
小朋友崇拜圈
题目链接:
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
输出
4
样例解释
如下图所示,崇拜关系用箭头表示,红色表示不在圈中。
显然,最大圈是[2 4 5 3] 构成的圈。
代码:
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;
}
}
灌溉
题目链接:
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
输出
9
代码:
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;
}
}
星光不问赶路人,岁月不负有心人