首页 > 其他分享 >递增三元组

递增三元组

时间:2023-03-29 19:46:57浏览次数:32  
标签:Scanner int 递增 dfs 三元组 static new scanner

此题考查暴力,二分

此题未 AC 用了两种方法解题

  1. dfs
  2. binarySearch
  1. dfs

    package lanqiao;
    
    import java.util.Scanner;
    
    public class N172 {
        static int[][] m;
        static int n;
        static long res = 0;
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            n = scanner.nextInt();
            m = new int[4][n + 1];
            for (int i = 1; i <= 3; i++) {
                for (int j = 1; j <= n; j++) {
                    m[i][j] = scanner.nextInt();
                }
            }
            for (int i = 1; i <= n; i++)
                dfs(1, i);
            System.out.println(res);
        }
    
        private static void dfs(int a, int b) {
            if (a == 3) {
                res++;
                return;
            }
            for (int i = 1; i <= n; i++) {
                if (a + 1 <= 3)
                    if (m[a + 1][i] > m[a][b]) {
                        dfs(a + 1, i);
                    }
            }
        }
    }
    
    1. binarySearch
    package test;
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class N172 {
    	static int n;
    	static int[] a;
    	static int[] b;
    	static int[] c;
    
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		n = scanner.nextInt();
    		a = new int[n + 1];
    		b = new int[n + 1];
    		c = new int[n + 1];
    		for (int i = 1; i <= n; i++)
    			a[i] = scanner.nextInt();
    		for (int i = 1; i <= n; i++)
    			b[i] = scanner.nextInt();
    		for (int i = 1; i <= n; i++)
    			c[i] = scanner.nextInt();
    		Arrays.sort(a);
    		Arrays.sort(c);
    		int res = 0;
    		for (int i = 1; i <= n; i++) {
    			int x1 = search2(1, n, b[i], a);
    			int x2 = search(1, n, b[i], c);
    			res += x1 * (n - x2 + 1);
    		}
    		System.out.println(res);
    	}
    
    	/**
    	 * 找到第一个大于 x 的数的下标
    	 * 
    	 * @param l
    	 * @param r
    	 * @param x
    	 * @param a
    	 * @return
    	 */
    	static int search(int l, int r, int x, int[] a) {
    		while (l <= r) {
    			int mid = (l + r) / 2;
    			if (x < a[mid]) {
    				r = mid - 1;
    			} else {
    				l = mid + 1;
    			}
    		}
    		return l;
    	}
    
    	/**
    	 * 找到第一个小于 x 的下标
    	 * 
    	 * @param l
    	 * @param r
    	 * @param x
    	 * @param a
    	 * @return
    	 */
    	static int search2(int l, int r, int x, int[] a) {
    		while (l <= r) {
    			int mid = (l + r) / 2;
    			if (x <= a[mid]) {
    				r = mid - 1;
    			} else {
    				l = mid + 1;
    			}
    		}
    		return r;
    	}
    }
    

    说明:

    1. dfs 超时
    2. bs 有两个测试点答案错误,有大佬知道哪里有错误还望指正,感谢各位!

标签:Scanner,int,递增,dfs,三元组,static,new,scanner
From: https://www.cnblogs.com/ChuenSan/p/17270084.html

相关文章

  • 最长递增
    最长递增题目描述在数列a_1,a_2,...,a_n中,如果a_i<a_{i+1}<a_{i+2}<...<a_j,则称a_i至a_j为一段递增序列,长度为j-i+1。定一个数列,请问数列中最长的递增......
  • 浩辰CAD看图王中如何实现数字递增?CAD文字递增使用攻略!
    在浩辰CAD中复制文字时,可以通过调用CAD文字递增命令来选择数字或字母并使其按照一定的规律进行复制,此命令在创建递增的编号或序号时非常方便。那么,在手机中编辑图纸时,如何......
  • C++重载递增和递减运算符
    重载递增和递减运算符在迭代器类中通常会实现递增运算符(++)和递减运算符(--),这两种运算符使得类可以在元素的序列中前后移动。C++语言并不要求递增和递减运算符必须是类......
  • 递增三元组
    递增三元组[蓝桥杯2018省B]递增三元组题目描述给定三个整数数组\(A=[A_1,A_2,\cdots,A_N]\),\(B=[B_1,B_2,\cdots,B_N]\),\(C=[C_1,C_2,\cdots,C_N]\)。......
  • 算法随想Day46【动态规划】| LC300-最长递增子序列、LC674-最长连续递增序列、LC718-
    LC300.最长递增子序列dp[i]含义:i之前包括i的以nums[i]结尾的最长递增子序列的长度intlengthOfLIS(vector<int>&nums){intsize=nums.size();vector......
  • 673.最长递增子序列的个数
    最长递增子序列的个数给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。注意 这个数列必须是严格递增的。示例1:输入:[1,3,5,4,7]输出:2解释:......
  • 代码随想录算法Day37 | 738.单调递增的数字
    738.单调递增的数字题目链接:738.单调递增的数字-力扣(LeetCode)思路将数字转换成字符数组形式,然后从后向前遍历,当遇到当前这个数大于后一个数的时候,这个数减一,他的后一......
  • Oracle使用MyBatis插入一条数据自动递增主键并返回主键值
    前期准备--创建t_table表createtablet_user(idnumber(10)primarykey,namevarchar2(20),agenumber(3));commentontablet_useris'用户信息表';......
  • 982. 按位与为零的三元组 (Hard)
    问题描述982.按位与为零的三元组(Hard)给你一个整数数组nums,返回其中按位与三元组的数目。按位与三元组是由下标(i,j,k)组成的三元组,并满足下述全部条件:0......
  • 982. 安位与为 0 的三元组
    题目链接: 982.按位与为零的三元组-力扣(LeetCode)    按位与为零的三元组-按位与为零的三元组-力扣(LeetCode) ......