蓝桥杯Java组试题 3

简介: 蓝桥公园——JAVA 二、递增序列(蓝桥杯)——JAVA

一、蓝桥公园——JAVA

 题目链接:

题目描述

小明喜欢观景,于是今天他来到了蓝桥公园。

已知公园有 N 个景点,景点和景点之间一共有 M条道路。小明有 Q个观景计划,每个计划包含一个起点 st和一个终点 ed,表示他想从 stst 去到 ed。但是小明的体力有限,对于每个计划他想走最少的路完成,你可以帮帮他吗?

输入描述

输入第一行包含三个正整数 N,M,Q

第 2 到 M + 1 行每行包含三个正整数 u,v,w表示 vu↔v 之间存在一条距离为 w 的路。

第 M+2 到 M + Q-1 行每行包含两个正整数 st,ed,其含义如题所述。

输出描述

输出共 Q 行,对应输入数据中的查询。

若无法从 st 到达 eded 则输出 −1。

输入输出样例

示例 1

输入

3 3 3
1 2 1
1 3 5
2 3 2
1 2
1 3
2 3

image.gif

输出

1
3
2

image.gif

运行限制

语言 最大运行时间 最大运行内存
C++ 1s 256M
C 1s 256M
Java 3s 256M
Python3 50s 256M

JAVA:

importjava.util.Arrays;
importjava.util.Scanner;
publicclass蓝桥公园 {
privatestaticfinallongINF=0x3f3f3f3f3f3f3f3fL;
privatestaticfinalintN=405;
privatestaticlong[][] dp=newlong[N][N];
privatestaticintn, m, q;
publicstaticvoidmain(String[] args) {
Scannerscanner=newScanner(System.in);
n=scanner.nextInt();
m=scanner.nextInt();
q=scanner.nextInt();
for (long[] row : dp) {
Arrays.fill(row, INF);
        }
for (inti=0; i<m; i++) {
intu=scanner.nextInt();
intv=scanner.nextInt();
longw=scanner.nextLong();
dp[u][v] =dp[v][u] =Math.min(dp[u][v], w);
        }
floyd();
while (q-->0) {
ints=scanner.nextInt();
intt=scanner.nextInt();
if (dp[s][t] ==INF) {
System.out.println(-1);
            } elseif (s==t) {
System.out.println(0);
            } else {
System.out.println(dp[s][t]);
            }
        }
    }
privatestaticvoidfloyd() {
for (intk=1; k<=n; k++) {
for (inti=1; i<=n; i++) {
for (intj=1; j<=n; j++) {
dp[i][j] =Math.min(dp[i][j], dp[i][k] +dp[k][j]);
                }
            }
        }
    }
}

image.gif

C/C++:

#include <bits/stdc++.h>usingnamespacestd;
typedeflonglongll;
constintN=405;
constllINF=0x3f3f3f3f3f3f3f3fLL;
lldis[N][N];
intn, m, q;
intmain()
{
cin>>n>>m>>q;
memset(dis, 0x3f, sizeofdis);
for (inti=1; i<=n; i++) dis[i][i] =0;
for (inti=1; i<=m; i++) {
llu, v, w; cin>>u>>v>>w;
dis[u][v] =dis[v][u] =min(dis[u][v], w); // 防止出现重边    }
// floydfor (intk=1; k<=n; k++)
for (inti=1; i<=n; i++)
for (intj=1; j<=n; j++)
dis[i][j] =min(dis[i][j], dis[i][k] +dis[k][j]);
// 输出ints, t;
for (inti=0; i<q; i++) {
cin>>s>>t;
llans=dis[s][t] ==INF?-1 : dis[s][t];
cout<<ans<<endl;
    }
return0;
}

image.gif

二、递增序列(蓝桥杯)——JAVA

对于一个字母矩阵,我们称矩阵中的一个递增序列是指在矩阵中找到两个字母,它们在同一行,同一列,或者在同一 4545 度的斜线上,这两个字母从左向右看、或者从上向下看是递增的。

例如,如下矩阵中

LANN
QIAO

LNLNANANIOAOLQAINONOAQINAN等 13 个 递增序列。注意当两个字母是从左下到右上排列时,从左向右看和从上向下看 是不同的顺序。

importjava.util.Scanner;
// 1:无需package// 2: 类名必须Main, 不可修改publicclassMain {
publicstaticintis1(charch[][],intm,intn){
intans=0;
for (inti=0;i<m;i++){
for (intj=0;j<n;j++){
intadd=1;
while(j+add<n){
if(ch[i][j]<ch[i][j+add]) ans++;  //横add++;
                }
add=1;
while(i+add<m){
if(ch[i][j]<ch[i+add][j]) ans++; //列递增add++;
                }
add=1;
while (i+add<m&&j+add<n){
if (ch[i][j]<ch[i+add][j+add]) ans++; //右下add++;
                }
add=1;
while(i-add>=0&&j+add<n){
if (ch[i][j]<ch[i-add][j+add]) ans++; //右上add++;
                }
add=1;
while(i+add<m&&j-add>=0){
if (ch[i][j]<ch[i+add][j-add]) ans++; //左下add++;
                }
            }
        }
returnans;
    }
publicstaticvoidmain(String[] args) {
Scannerscan=newScanner(System.in);
intm=30,n=50;
charch[][] =newchar[m][n];
for(inti=0;i<m;i++){
charst[] =scan.nextLine().toCharArray();
ch[i] =st;
        }
System.out.println(is1(ch,m,n));
//在此输入您的代码...scan.close();
//System.out.println("52800");    }
}
相关文章
|
12天前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
48 6
|
12天前
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
37 5
|
4月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
72 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
8月前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
66 4
|
8月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
59 3
|
8月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
65 2
|
8月前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
47 1
|
8月前
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
43 0
|
27天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
85 17
|
2月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者