算法基础题解
某不科学的cs蒟蒻
I Come I See I Conquer
展开
-
二进制中1的个数
给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2源代码#include<bits/stdc++.h>using namespace std;const int N=1000.原创 2021-03-03 22:09:52 · 163 阅读 · 1 评论 -
判断子序列
给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。[输入格式]第一行包含两个整数 n,m。第二行包含 n 个整数,表示 a1,a2,…,an。第三行包含 m 个整数,表示 b1,b2,…,bm。[输出格式]如果 a 序列是 b 序列的子序列,输出一行 Ye.原创 2021-03-03 20:44:36 · 315 阅读 · 1 评论 -
数组元素的目标和
给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。[输入格式]第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数,表示数组B。[输出格式]共一行,包含两个整数 i 和 j。数据范围数组长度不超过100000。同一数组内元素各不相同。1≤数组元素≤109[输入样例]4 5 61 2 4 73 4 6 8 9.原创 2021-03-03 20:37:30 · 271 阅读 · 1 评论 -
最长连续不重复子序列
给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。[输入格式]第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。[输出格式]共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。[数据范围]1≤n≤100000[输入样例]51 2 2 3 5[输出样例]3源代码#include<iostream>using namespace std;const int N=100010;int n,r.原创 2021-03-03 20:18:09 · 128 阅读 · 1 评论 -
差分矩阵
输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。[输入格式]第一行包含整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含5个整数x1, y1, x2, y2, c,表示一个操作。[输出格式]共 n 行,每行 m 个整数,表示所有操作进行完毕后的最终矩.原创 2021-03-03 20:10:06 · 105 阅读 · 1 评论 -
差分
输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。[输入格式]第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。[输出格式]共一行,包含n个整数,表示最终序列。[数据范围]1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤1000[输入样例]6 31 2.原创 2021-03-03 19:58:03 · 79 阅读 · 1 评论 -
子矩阵的和
输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。[输入格式]第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。[输出格式]共q行,每行输出一个询问的结果。[数据范围]1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m,−1000≤矩阵.原创 2021-03-03 19:51:11 · 97 阅读 · 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 3.原创 2021-03-03 19:44:16 · 132 阅读 · 1 评论 -
高精度除法
题目描述给定两个非负整数A,B,请你计算 A / B的商和余数。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤B≤10000B 一定不为0输入样例:72输出样例:31源代码#include<bits/stdc++.h>using namespace std;string a;int b;vector<int> A;vector<.原创 2021-02-17 21:00:54 · 90 阅读 · 0 评论 -
高精度乘法
题目描述给定两个正整数A和B,请你计算A * B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A * B的值数据范围1≤A的长度≤100000,0≤B≤10000输入样例:23输出样例:6【源代码】#include<bits/stdc++.h>using namespace std;string a;int b;vector<int> A;vector<int> mul(vector<in.原创 2021-02-17 20:47:28 · 86 阅读 · 0 评论 -
高精度减法
【题目描述】给定两个正整数,计算它们的差,计算结果可能为负数。【输入格式】共两行,每行包含一个整数。【输出格式】共一行,包含所求的差。【数据范围】1≤整数长度≤105【输入样例】3211【输出样例】21【源代码】#include<bits/stdc++.h>using namespace std;string a,b;vector<int> A,B;bool cmp(string a,string b){ if(a.size()!= .原创 2021-02-17 20:36:55 · 101 阅读 · 0 评论 -
高精度加法
[题目背景]给定两个正整数,计算它们的和。[ 输入格式]共两行,每行包含一个整数。[输出格式]共一行,包含所求的和。[数据范围]1≤整数长度≤100000[输入样例]1223[输出样例]35[源代码]#include<bits/stdc++.h>using namespace std;string a,b;vector<int> A,B;vector<int> add(vector<int> A,vector<in.原创 2021-02-17 20:11:59 · 95 阅读 · 0 评论 -
数的三次方根
[题目描述]给定一个浮点数n,求它的三次方根。[输入格式]共一行,包含一个浮点数n。[输出格式]共一行,包含一个浮点数,表示问题的解。注意,结果保留6位小数。[数据范围]−10000≤n≤10000[输入样例]1000.00[输出样例]10.000000[源代码]#include<bits/stdc++.h>using namespace std;double l,r,mid,cnt;int main(){ cin>>cnt; .原创 2021-02-17 19:18:29 · 163 阅读 · 0 评论 -
数的范围
[题目描述]给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。[输入格式]第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。[输出格式]共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。[数据范围].原创 2021-02-17 19:10:05 · 219 阅读 · 0 评论 -
逆序对的数量
[题目描述]给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。[输入格式]第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。[输出格式]输出一个整数,表示逆序对的个数。[数据范围]1≤n≤100000[输入样例]62 3 4 5 6 1[输出样例]5#include<bits/stdc++.h&.原创 2021-02-17 19:02:34 · 214 阅读 · 0 评论 -
归并排序
[题目背景]给定你一个长度为n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。[输入格式]输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。[输出格式]输出共一行,包含 n 个整数,表示排好序的数列。[数据范围]1≤n≤100000[输入样例]53 1 2 4 5[输出样例]1 2 3 4 5[原代码]#include<bits/stdc++.h>using nam.原创 2021-02-17 18:53:14 · 82 阅读 · 0 评论 -
第k个数
[题目背景]给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。[输入格式]第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在1~109范围内),表示整数数列。[输出格式]输出一个整数,表示数列的第k小数。[数据范围]1≤n≤100000,1≤k≤n[输入样例]5 32 4 1 5 3[输出样例]3[源代码]#include<bits/stdc++.h>using namespace std;co.原创 2021-02-17 13:27:17 · 113 阅读 · 0 评论 -
快速排序
[题目描述]给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。[输入格式]输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~1e9范围内),表示整个数列。[输出格式]输出共一行,包含 n 个整数,表示排好序的数列。[数据范围]1≤n≤100000[输入样例]53 1 2 4 5[输出样例]1 2 3 4 5[源代码]#include<bits/stdc++.h>using nam.原创 2021-02-17 13:14:23 · 137 阅读 · 0 评论