#P2180. 2024.10.13-第1题-亮灭
-
1000ms
Tried: 117
Accepted: 27
Difficulty: 3
所属公司 :
字节
时间 :2024年10月13日
2024.10.13-第1题-亮灭
模拟题,把每个数字亮了哪些灯标记一下,比较即可
c++
#include<bits/stdc++.h>
using namespace std;
// 定义一个三维布尔数组 g,用于记录状态
bool g[10][10][10];
// 在指定层和行设置状态为1(行操作)
void r(int l, int row) {
g[l][row][1] = g[l][row][2] = g[l][row][3] = g[l][row][4] = 1;
}
// 在指定层和列设置状态为1(列操作)
void c(int l, int col) {
for (int i = 1; i <= 5; i++)
g[l][i][col] = 1;
}
// 在指定层、行和列设置状态为1(点操作)
void p(int l, int row, int col) {
g[l][row][col] = 1;
}
char s[100005];
int main() {
// 初始化状态
r(0, 1); r(0, 5); c(0, 1); c(0, 4);
c(1, 4); p(1, 1, 3);
r(2, 1); r(2, 3); r(2, 5); p(2, 2, 4); p(2, 4, 1);
r(3, 1); r(3, 3); r(3, 5); c(3, 4);
r(4, 3); c(4, 3); p(4, 1, 1); p(4, 2, 1);
r(5, 1); r(5, 3); r(5, 5); p(5, 2, 1); p(5, 4, 4);
r(6, 1); r(6, 3); r(6, 5); c(6, 1); p(6, 4, 4);
r(7, 1); c(7, 4);
r(8, 1); r(8, 3); r(8, 5); c(8, 1); c(8, 4);
r(9, 1); r(9, 3); r(9, 5); c(9, 4); p(9, 2, 1);
int T;
cin >> T;
while (T--) {
int n, x, y;
cin >> n >> x >> y;
scanf("%s", s);
int ans = 0; // 记录状态变化次数
for (int i = 1; i < n; i++)
// 统计状态变化
if (g[s[i] - '0'][x][y] != g[s[i - 1] - '0'][x][y]) ans++;
cout << ans << endl;
}
}
python
# 初始化一个三维列表 g,用于记录状态
g = [[[0] * 10 for _ in range(10)] for _ in range(10)]
# 在指定层和行设置状态为1(行操作)
def r(l, row):
for i in range(1, 5):
g[l][row][i] = 1
# 在指定层和列设置状态为1(列操作)
def c(l, col):
for i in range(1, 6):
g[l][i][col] = 1
# 在指定层、行和列设置状态为1(点操作)
def p(l, row, col):
g[l][row][col] = 1
# 初始化状态
r(0, 1); r(0, 5); c(0, 1); c(0, 4)
c(1, 4); p(1, 1, 3)
r(2, 1); r(2, 3); r(2, 5); p(2, 2, 4); p(2, 4, 1)
r(3, 1); r(3, 3); r(3, 5); c(3, 4)
r(4, 3); c(4, 3); p(4, 1, 1); p(4, 2, 1)
r(5, 1); r(5, 3); r(5, 5); p(5, 2, 1); p(5, 4, 4)
r(6, 1); r(6, 3); r(6, 5); c(6, 1); p(6, 4, 4)
r(7, 1); c(7, 4)
r(8, 1); r(8, 3); r(8, 5); c(8, 1); c(8, 4)
r(9, 1); r(9, 3); r(9, 5); c(9, 4); p(9, 2, 1)
T = int(input()) # 读取测试案例数量
for _ in range(T):
n, x, y = map(int, input().split()) # 读取字符串长度、行和列
s = input().strip() # 输入字符串
ans = 0 # 记录状态变化次数
for i in range(1, n):
# 统计状态变化
if g[int(s[i])][x][y] != g[int(s[i - 1])][x][y]:
ans += 1
print(ans) # 输出结果
java
import java.util.Scanner;
public class Main {
// 定义一个三维布尔数组 g,用于记录状态
static boolean[][][] g = new boolean[10][10][10];
// 在指定层和行设置状态为 true(行操作)
static void r(int l, int row) {
g[l][row][1] = g[l][row][2] = g[l][row][3] = g[l][row][4] = true;
}
// 在指定层和列设置状态为 true(列操作)
static void c(int l, int col) {
for (int i = 1; i <= 5; i++) {
g[l][i][col] = true;
}
}
// 在指定层、行和列设置状态为 true(点操作)
static void p(int l, int row, int col) {
g[l][row][col] = true;
}
public static void main(String[] args) {
// 初始化状态
r(0, 1); r(0, 5); c(0, 1); c(0, 4);
c(1, 4); p(1, 1, 3);
r(2, 1); r(2, 3); r(2, 5); p(2, 2, 4); p(2, 4, 1);
r(3, 1); r(3, 3); r(3, 5); c(3, 4);
r(4, 3); c(4, 3); p(4, 1, 1); p(4, 2, 1);
r(5, 1); r(5, 3); r(5, 5); p(5, 2, 1); p(5, 4, 4);
r(6, 1); r(6, 3); r(6, 5); c(6, 1); p(6, 4, 4);
r(7, 1); c(7, 4);
r(8, 1); r(8, 3); r(8, 5); c(8, 1); c(8, 4);
r(9, 1); r(9, 3); r(9, 5); c(9, 4); p(9, 2, 1);
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt(); // 读取测试案例数量
while (T-- > 0) {
int n = scanner.nextInt(); // 字符串长度
int x = scanner.nextInt(); // 行
int y = scanner.nextInt(); // 列
String s = scanner.next(); // 输入字符串
int ans = 0; // 记录状态变化次数
for (int i = 1; i < n; i++) {
// 统计状态变化
if (g[s.charAt(i) - '0'][x][y] != g[s.charAt(i - 1) - '0'][x][y]) {
ans++;
}
}
System.out.println(ans); // 输出结果
}
scanner.close(); // 关闭扫描器
}
}
题目内容
LED屏幕上实现数字的变换本质是每一个LED灯泡的亮灭控制,塔塔想要知道,在整个变换完成后,某个LED灯泡经历了几次亮灭转换。LED屏幕的大小固定为5×4的矩形,0到9这十个数字在LED屏幕上的显示效果如下图所示:

输入描述
每个测试文件均包含多组测试数据。
第一行输入一个整数T(1≤T≤105)代表数据组数,
每组测试数据描述如下:
第一行输入三个整数n,x和y(1≤n≤105;1≤x≤5;1≤y≤4)代表亮灭变换的长度、询问位置的行与列。
第二行输入一个长为n,且只由数字组成的字符串s代表亮灭变换的顺序。 除此之外,保证所有的n之和不超过。
输出描述
对于每一组测试数据,在一行上输出一个正整数,代表第x行第y列的LED灯泡在整个亮灭变换过程中经历的转换次数。
样例1
输入
2
5 1 1
00000
6 1 2
114514
输出
0
2
说明
对于第一组测试数据,(1,1)这个位置的LED灯泡始终亮起,没有经过亮灭转换。 对于第二组测试数据,在4转变为5时由暗变亮,在5转变为1时由亮变暗。