题目描述
小蓝负责花园的灌溉工作。
花园可以看成一个
n 行
m 列的方格图形。中间有一部分位置上安装有出水管。
小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。
每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
给定花园水管的位置,请问
k 分钟后,有多少个方格被灌溉好?
输入描述
输入的第一行包含两个整数
n,
m。
第二行包含一个整数
t,表示出水管的数量。
接下来
t 行描述出水管的位置,其中第
i 行包含两个数
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.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n = scan.nextInt();
int m = scan.nextInt();
int[][] arr = new int[n][m];
int t = scan.nextInt();
for(int i = 0 ; i < t ; i++) arr[scan.nextInt() - 1][scan.nextInt() - 1] = 1;
int k = scan.nextInt();
int num = 1;
for(int i = 0 ; i < k ; i++){
num++;
for(int j = 0; j < n ; j++){
for(int f = 0 ;f < m ; f++){
if(arr[j][f] == num-1){
if(j-1 >= 0) arr[j-1][f] = num;
if(j+1 < n) arr[j+1][f] = num;
if(f-1 >= 0) arr[j][f-1] = num;
if(f+1 < m) arr[j][f+1] = num;
}
}
}
}
int ans = 0;
for(int i = 0; i < n ; i++)
for(int j = 0; j < m ; j++)
if(arr[i][j] != 0) ans++;
System.out.println(ans);
scan.close();
}
}
题目描述
班里
N 个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。
在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。
求满足条件的圈最大多少人?
小朋友编号为 1,2,3,⋯
N。
输入描述
输入第一行,一个整数
N(3<
N<105)。
接下来一行
N 个整数,由空格分开。
输出描述
要求输出一个整数,表示满足条件的最大圈的人数。
输入输出样例
示例
输入
9
3 4 2 5 3 8 4 6 9
输出
4
题解思路:
模拟 : 当数段值大于数组值 说明可以形成圈;
因为是圈,使用从哪里起,回到哪里去; 遍历每一个小朋友,从每一个小朋友开始记录最大圈
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n = scan.nextInt();
int[] arr = new int[n+1];
for(int i = 1 ; i<= n ; i++) arr[i] = scan.nextInt();
int maxLen = 0;
for(int i = 1 ; i <= n ; i ++){
int len = dfs(arr , i , 0);
if(maxLen < len) maxLen = len;
}
System.out.println(maxLen);
scan.close();
}
static int dfs(int[] arr , int i , int len){
int key = arr[i]; len++;
while(key != i){
if(len > arr.length) return 0;
key = arr[key]; len++;
}
return len;
}
}