蓝桥杯——试题 算法训练 Sereja and Squares
Java 代码
````
import java.util.Scanner;
public class Main {
private static long num = 0;
private static long mod = 4294967296L;
private static char[] arr = new char[100000 + 7];
private static long[] dp = new long[100000 + 7];
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
char[] tempChar = input.next().toCharArray();
for (int i = 0; i < tempChar.length; i++) {
arr[i + 1] = tempChar[i];
}
// 没有右括号 ,这一步一定不能漏
dp[0] = 1;
long start = System.currentTimeMillis();
f(arr, n);
long end = System.currentTimeMillis();
System.out.println(num);
System.out.println(end - start + "ms");
}
static void f(char[] arr, int n) {
if (n % 2 == 1) {
// 奇数直接返回
return;
}
// 用来记录左括号的个数
int left = 0;
int n2 = n >> 1;
// 循环从1~n
for (int i = 1; i <= n; i++) {
if (arr[i] == '?') {
// 若是问好,则可能是左括号也可能是右括号
// 确定右括号的最大上限
int rightMax = i >> 1;
if (i != n) {
/*
当dp到下标i时,可以确定的最多的右括号为i/2,
若现在确定的是左括号则前面i-1个格子就是确定rightMax个右括号的结果
若现在确定的是右括号,则前面i-1个格子确定的就是rightMax-1个右括号的结果
*/
// 因为只是确定了右括号的最大上限,而不确定到底是多少,所以有很多种可能
// 每次后面多来一个右括号的话,前面的可能性就越多
for (; rightMax >= 1; rightMax--) {
dp[rightMax] += dp[rightMax - 1];
dp[rightMax] %= mod;
}
} else {
//i==n一定是右括号,只要确定前n-1个格子所确定出来的n>>1-1个右括号的结果即可
dp[rightMax] = dp[rightMax - 1];
dp[rightMax] %= mod;
}
} else {
// 若不是问好,则一定是左括号
left++;
}
}
if (left > n2) {
// 左括号的个数超过一半
return;
}
for (int i = 0; i < n2 - left; i++) {
dp[n2] *= 25;
dp[n2] %= mod;
}
num = dp[n2] % mod;
}
}
蓝桥杯——试题 算法训练 Sereja and Squares的更多相关文章
- 蓝桥杯——试题 算法训练 Yaroslav and Algorithm
试题 算法训练 Yaroslav and Algorithm 资源限制 时间限制:100ms 内存限制:128.0MB 问题描述 (这道题的数据和SPJ已完工,尽情来虐吧!) Yaroslav喜欢算法 ...
- Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)
试题 算法训练 连通分块 资源限制 时间限制:200ms 内存限制:8.0MB 问题描述 连通分块 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2 ...
- Java实现 蓝桥杯VIP 算法训练 无权最长链
试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...
- Java实现 蓝桥杯VIP 算法训练 最大质因数(暴力)
试题 算法训练 最大质因数 问题描述 给出N个数字,求出有最大的最大质因数的那个数 输入格式 第一行:一个整数N. 接下来的N行,每行一个整数A_i,表示给出的那N个数字. 输出格式 第一行:一个整数 ...
- Java实现 蓝桥杯VIP 算法训练 与1连通的点的个数(并查集)
试题 算法训练 与1连通的点的个数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 没有问题描述. 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 ...
- Java实现 蓝桥杯VIP 算法训练 非递归(暴力)
试题 算法训练 非递归 问题描述 当x>1时,Hermite多项式的定义见第二版教材125页.用户输入x和n,试编写"非递归"函数,输出对应的Hermite多项式的值.其中x ...
- Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)
试题 算法训练 步与血 问题描述 有n*n的方格,其中有m个障碍,第i个障碍会消耗你p[i]点血.初始你有C点血,你需要从(1,1)到(n,n),并保证血量大于0,求最小步数. 输入格式 第一行3个整 ...
- Java实现 蓝桥杯VIP 算法训练 -2进制(暴力)
试题 算法训练 -2进制 问题描述 给出1个十进制整数N,计算出它的-2进制表示. 输入格式 第一行:一个整数N,表示要转换的十进制数. 输出格式 第一行:N的-2进制表示. 样例输入 -13 样例输 ...
- Java实现蓝桥杯VIP算法训练 纪念品分组
试题 算法训练 纪念品分组 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡, ...
随机推荐
- 【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享. fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测 ...
- 文件夹copy器(多进程版)
import multiprocessing import os import time import random def copy_file(queue, file_name,source_fol ...
- 使用JWT创建安全的ASP.NET Core Web API
在本文中,你将学习如何在ASP.NET Core Web API中使用JWT身份验证.我将在编写代码时逐步简化.我们将构建两个终结点,一个用于客户登录,另一个用于获取客户订单.这些api将连接到在本地 ...
- Centos7部署FytSoa项目至Docker——第一步:安装Docker
FytSoa项目地址:https://gitee.com/feiyit/FytSoaCms 部署完成地址:http://82.156.127.60:8000/ 先到腾讯云申请一年的云服务器,我买的是一 ...
- (九)整合 ElasticSearch框架,实现高性能搜索引擎
整合 ElasticSearch框架,实现高性能搜索引擎 1.SpringBoot整合ElasticSearch 1.1 核心依赖 1.2 配置文件 1.3 实体类配置 1.4 数据交互层 1.5 演 ...
- (二)SpringBoot应用运维脚本
SpringBoot应用运维脚本 一.获取PID 二.Kill命令 三.nohup命令 四.编写SpringBoot应用运维脚本 4.1全局变量 4.2编写核心方法 4.3Info方法 4.4stat ...
- Spark 将DataFrame所有的列类型改为double
Spark 将DataFrame所有的列类型改为double 1.单列转化方法 2.循环转变 3.通过:_* 1.单列转化方法 import org.apache.spark.sql.types._ ...
- Linux环境Hadoop安装配置
Linux环境Hadoop安装配置 1. 准备工作 (1)linux配置IP(NAT模式) (2)linux关闭防火墙 (3)设置主机名 (4)设置映射 (5)设置免密登录 2. 安装jdk (1)上 ...
- Hbase 表的设计原则 ————总结
1.列族的数量及列族的势 建议将HBase列族的数量设置的越少越好.当强,对于两个或两个以上的列族HBase并不能处理的很好.这是由于HBase的Flushing和压缩是基于Region的.当一个列族 ...
- Spring Boot项目application.yml文件数据库配置密码加密
在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了 ...