蓝桥杯训练

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

例如,如下矩阵中

复制代码
LANN
QIAO

有LN、LN、AN、AN、IO、AO、LQ、AI、NO、NO、AQ、IN、ANLN、LN、AN、AN、IO、AO、LQ、AI、NO、NO、AQ、IN、AN 等 131 个 递增序列。注意当两个字母是从左下到右上排列时,从左向右看和从上向下看 是不同的顺序。

对于下面的 30 行 50 列的矩阵,请问总共有多少个递增序列?

VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX

java 复制代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
       /* Scanner scan = new Scanner(System.in);
        char[][] arr=new char[30][50];
        for(int i=0;i<30;i++){
            arr[i]=(scan.next()).toCharArray();
        }
        int sum =0;
        for(int i=0;i<30;i++){
            for(int j=0;j<50;j++){
                for(int m=0;m<30;m++){
                    for(int n=0;n<50;n++){
                        if(!(m==i&&n==j)){
                            if((m==i)||(n==j)||Math.abs(m-i)==Math.abs(n-j)){
                                if((m>i&&n>j)||(m==i&&n>j)||(n==j&&m>i)){
                                    if(arr[i][j]<arr[m][n]){
                                        sum++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(sum);*/
        System.out.println(52800);
    }
}

思路:暴力解法,四层循环,先看成字符数组,再考虑大小关系和方向关系。

2

儿童节那天有 KK位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。

小明一共有 N 块巧克力,其中第 ii块是 Hi×Wii 的方格组成的长方形。为了公平起见,

小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:

  1. 形状是正方形,边长是整数;

  2. 大小相同;

例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3 的巧克力。

当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?

输入描述

第一行包含两个整数 N,K (1≤N,K≤105)。

以下 N 行每行包含两个整数 Hi,Wi(1≤Hi,Wi≤105)。

输入保证每位小朋友至少能获得一块 1x1 的巧克力。

输出描述

输出切出的正方形巧克力最大可能的边长。

输入输出样例

示例

输入

复制代码
2 10
6 5
5 6

输出

复制代码
2
java 复制代码
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        boolean flag = true;
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt(); 
        int K = sc.nextInt(); 
        int[][] arr = new int[N][2];
        
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < 2; j++) {    
                arr[i][j] = sc.nextInt();
            }
        }
        int length=1;
        int sum = 0;
        while(flag){
          int i;
          for(i=0;i<N;i++){

            sum+=(arr[i][0]/length)*(arr[i][1]/length);
            if(sum>=K){
              break;
            }
          }
        if(i==N&&sum<K){
          flag=false;
        }else{
          length++;
          sum=0;
        }
        }
        System.out.println(length-1);
        sc.close();
    }
}

思路:确立x*x,切出的矩形占两位,建立数组;再假设从1*1开始切,再看切的个数和小朋友个数作比较。

相关推荐
大志哥1232 分钟前
IntelliJ IDEA父子工程中导入公网远程备份项目到新目录
java·ide·intellij-idea
廋到被风吹走4 分钟前
【Spring】DefaultListableBeanFactory 详解
java·python·spring
东东的脑洞4 分钟前
【面试突击八】Spring IOC:Bean 创建流程全解析(从 getBean 到 AOP 代理生成)
java·spring·面试
灰色人生qwer6 分钟前
VS Code 配置Java环境
java·开发语言
tgethe7 分钟前
Java 链表(LinkedList)
java·开发语言·链表
梁萌8 分钟前
idea使用AI插件(CodeGeeX)
java·ide·ai·intellij-idea·插件·codegeex
东北小狐狸-Hellxz10 分钟前
后端生成的URL中含base64参数值,经tomcat重定向后偶发前端无法解密报错
java·前端·tomcat
myzzb15 分钟前
python调用ffmpeg.exe封装装饰类调用
python·学习·ffmpeg·开发
悟能不能悟16 分钟前
java list怎么进行group
java·python·list
hssfscv20 分钟前
Javeweb学习笔记——Vue+Ajax
vue.js·笔记·学习·ajax