优质算法题 1

题目描述

电力之城是蓝桥王国的核心城市,因为它产生的电能供给所有的城市使用。

电力之城的发电原理十分简单:城市中心总共摆放了 N 根电力之柱,电力之柱有激活和关闭两种状态。如果相邻电力之柱的状态不一致,就会产生势能差,从而产生 1 点电力,否则不产生电力。电力之城的总电能等于所有相邻电力之柱所产生的电力之和。

小蓝和小桥是电力之城的电力战士,负责提高电力之城的总电能。他们分别可以进行一种称为“翻转”的操作:

选择一个区间 [L, R] (1 ≤ L ≤ R ≤ N),并翻转该区间内所有电力之柱的状态(激活变为关闭,关闭变为激活)。

但是,两人必须保证每次操作后电力之城的总电能增加。

由于这项工作非常枯燥,现在小蓝和小桥想知道,如果由小蓝先手,两人都采取最优策略进行“翻转”操作,率先无法进行操作的玩家将失败,那么谁将获胜?

请你帮忙解决这个问题。如果小蓝最终获胜则输出 lan,否则输出 qiao。

输入格式

第一行输入一个整数 T (1 ≤ T ≤ 1000) 表示测试用例的数量。

对于每个测试用例:

第一行输入一个整数 N (1 ≤ N ≤ 1000) 表示电力之柱的数量。

第二行输入一个长度为 N 的二进制字符串 S (S_i ∈ [0, 1]),若 S_i 为 1 表示第 i 根电力之柱为激活状态,若为 0 则为关闭状态。

输出格式

对于每个测试用例,输出一行,如果小蓝最终获胜则输出 lan,否则输出 qiao。
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
for (int i = 0; i < T; i++) {
int arr = 0;//判断输入例子中相邻数的数量
int N = scanner.nextInt();
String a = scanner.next();
for(int j = 1; j < a.length();j++) {
if (a.charAt(j) == a.charAt(j - 1)) {
arr++;
}
}
if(arr % 3 == 0){
System.out.println("qiao");
}else{
System.out.println("lan");
}

}
}

}

总电能增加本质上是通过arr(输入例子中相邻数的数量)的减少来判断,总电量是总个数-1-arr,此时翻转边界内部不变,主要取决边界,arr是博弈的原数,因此博弈变成arr的-1和-2,先手时若为3的倍数,则后手必胜。

posted @ 2026-05-19 23:17  鬼计i  阅读(5)  评论(0)    收藏  举报