
刷题笔记
java、c++
一杯红酒7
这个作者很懒,什么都没留下…
展开
-
11.前缀和
1.题目输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 32 4输出样例:36102.原创 2020-12-01 11:28:52 · 217 阅读 · 0 评论 -
10.高精度除法
1.题目给定两个非负整数A,B,请你计算 A / B的商和余数。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤B≤10000B 一定不为0输入样例:72输出样例:312.解题这里是一个高精度数除以一个非高精度数,java版本没有将高精度数进行倒序存储,但考虑到一道题中同时出现加减乘除的话,应该与前面的加法减法乘法一致,将其倒置存储,所以C++版本为倒置数组后的计算。im原创 2020-12-01 11:27:49 · 205 阅读 · 0 评论 -
9.高精度乘法
1.题目给定两个正整数A和B,请你计算A * B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A * B的值。数据范围1≤A的长度≤100000,0≤B≤10000输入样例:23输出样例:62.解题两个数相乘,可以采用不同于平常计算乘法的方法因为这里的两个数X,Y大小范围不一样,X是一个大数,而Y是在10000以内的小数,所以,将X倒置,然后每一位与Y相乘,得到的结果对10取模即为所求结果对应位的值,除以10为进位java:import j原创 2020-11-30 10:04:58 · 256 阅读 · 0 评论 -
8.高精度减法
1.题目给定两个正整数,计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤整数长度≤105输入样例:3211输出样例:212.解题对于两个大数的减法,类似于加法,将两个数倒序放入数组中进行计算这里需要考虑借位,所以分两种情况(1)如果Xi - Yi - t >= 0, 则直接进行减法运算即可(Xi - Yi - t)(2)如果Xi - Yi - t < 0, 则需要向上一位借一位再相减(Xi - Yi原创 2020-11-30 09:59:43 · 302 阅读 · 0 评论 -
7.高精度加法
1.题目给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:352.解题两个大数相加,会造成越界的问题,所以需要将两个大数存放至数组,然后相加(1)存放大数到数组从前往后倒序存储,便于进位的计算(2)计算进位java:import java.io.BufferedReader;import java.io.IOException;import java.io.In原创 2020-11-29 14:12:06 · 329 阅读 · 0 评论 -
6.数的三次方根
1.题目给定一个浮点数n,求它的三次方根。输入格式共一行,包含一个浮点数n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。数据范围−10000 ≤ n ≤ 10000输入样例:1000.00输出样例:10.0000002.解题利用二分法求数的三次方根,经验值:保留6位则r-l>1e-8,要多2java:import java.util.Scanner;public class cubeRoot { public static vo原创 2020-11-27 21:31:26 · 587 阅读 · 0 评论 -
5.数的范围
1.题目给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤1000原创 2020-11-26 15:11:54 · 215 阅读 · 0 评论 -
4.逆序对的数量
1.题目给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000输入样例:62 3 4 5 6 1输出样例:52.解题利用归并排序的思想,在每次合并左右两个子数组时计算逆序对的数量方原创 2020-11-26 15:07:59 · 460 阅读 · 0 评论 -
3.归并排序
1.题目给定你一个长度为n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 52.解题分治思想(1)确定分界点mid,即数组中间(2)递归排序左边和右边(3)归并:将两个有序的数组合并原创 2020-11-25 15:36:37 · 576 阅读 · 0 评论 -
2.第k个数
1.题目给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在1~109范围内),表示整数数列。输出格式输出一个整数,表示数列的第k小数。数据范围1≤n≤100000,1≤k≤n输入样例:5 32 4 1 5 3输出样例:32.解题在快速排序的基础上,判断第k小的数在数组的左边还是右边,从而决定递归排序哪一边java:package KthSmallestN原创 2020-11-25 15:34:57 · 556 阅读 · 0 评论 -
1.快速排序
1.题目给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 52.解题基于分治的思想(1)确定分界点(2)调整区间(3)递归快速排序,首先令数组第一个元素为key,然原创 2020-11-25 15:33:10 · 232 阅读 · 0 评论