蓝桥杯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");    }
}
相关文章
|
1月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
31 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
5月前
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
52 4
|
5月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
33 4
|
5月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
44 3
|
5月前
|
Java
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
2021蓝桥杯大赛软件类国赛Java大学B组 完全日期 复杂遍历搜索
50 2
|
5月前
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
38 1
|
5月前
|
Java
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
2023蓝桥杯大赛软件类省赛Java大学B组G题 买二增一 队列的简单应用
39 1
|
5月前
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
33 0
|
6天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
5天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
下一篇
无影云桌面