算法
1z1
奋斗ing
展开
-
AcWing:数星星
题目入口 题目跳转 题目描述 天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。 如果一个星星的左下方(包含正左和正下)有 k 颗星星,就说这颗星星是 k 级的。 例如,上图中星星 5 是 3 级的(1,2,4 在它左下),星星 2,4 是 1 级的。 例图中有 1 个 0 级,2 个 1 级,1 个 2 级,1 个 3 级的星星。 给定星星的位置,输出各级星星的数目。 换句话说,给定 N 个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。 输入格式 第一原创 2022-03-31 17:56:32 · 159 阅读 · 0 评论 -
AcWing 1236:递增三元组
题目入口 题目跳转 题目描述 给定三个整数数组 A=[A1,A2,…AN], B=[B1,B2,…BN], C=[C1,C2,…CN], 请你统计有多少个三元组 (i,j,k) 满足: 1.1≤i,j,k≤N 2.Ai<Bj<Ck 输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,…AN。 第三行包含 N 个整数 B1,B2,…BN。 第四行包含 N 个整数 C1,C2,…CN。 输出格式 一个整数表示答案。 数据范围 1≤N≤1e5 0≤Ai,Bi,Ci≤1原创 2022-03-28 09:26:14 · 426 阅读 · 0 评论 -
AcWing:连号区间数
题目描述 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1∼N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。 当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。 输入格式 第一行是一个正整数 N,表示排列的规模。 第二行是 N 个不同的数字 Pi,表示这 N 个数字原创 2022-03-27 16:36:05 · 129 阅读 · 0 评论 -
Acwing:费解的开关
题目描述 你玩过“拉灯”游戏吗? 25 盏灯排成一个 5×5 的方形。 每一个灯都有一个开关,游戏者可以改变它的状态。 每一步,游戏者可以改变某一个灯的状态。 游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字 1 表示一盏开着的灯,用数字 0 表示关着的灯。 下面这种状态 10111 01101 10111 10000 11011 在改变了最左上角的灯的状态后将变成: 01111 11101 10111 10000 11011 再改变它正中间的灯后状态将变成原创 2022-03-18 23:13:25 · 2880 阅读 · 0 评论 -
求素数新方法:素数筛法
问题描述 求1到n(n > 1e5)之间的素数 分析 如果使用普通判断素数的方法时间复杂度是O(n√n),很明显是不能满足的,会出现超时,所以应该使用新的方法。 时间复杂度 O(nloglogn) 代码 #include <iostream> using namespace std; //表长 const int maxn = 101; //表示是否被筛到 初始全部都没有被筛到 bool p[maxn] = {false}; //存放素数 int prime[maxn];原创 2022-03-12 23:49:26 · 233 阅读 · 0 评论 -
最大公约数
题目描述 输入两个正整数,求其最大公约数 输入 测试数据有多组,每组输入两个正整数 输出 对于每组输入,请输出其最大公约数 样例输入 49 14 样例输出 7 代码 #include<iostream> using namespace std; int gcd(int a,int b) { if(b == 0) return a; else return gcd(b, a % b); } int a, b; int ma原创 2022-03-12 20:47:42 · 205 阅读 · 1 评论 -
快速幂问题
问题背景 给定三个正整数a,b,m(a < 1e9,b < 1e6,1 < m < 1e9),求a的b次方取余m 代码 #include<iostream> using namespace std; typedef long long ll; ll binaryPow(ll a,ll b,ll m) { //b以二进制的形式表示 int ans = 1; while(b > 0) { if(b & 1) { ans = ans原创 2022-03-11 14:13:42 · 278 阅读 · 0 评论 -
判断两条直线是否相交
代码 #include<iostream> using namespace std; struct line{ int xa; int ya; int xb; int yb; int getMax_x() { return xa > xb ? xa : xb; } int getMin_x() { return xa < xb ? xb : xa; } in原创 2022-03-11 12:45:30 · 381 阅读 · 0 评论 -
二分查找
二分整数查找的两种模版 第一种 public void search(int[] arr,int target){ int l = 0;int r = arr.length-1; while(l < r){ int mid = l +r >> 1; if(check(mid)) r = mid; else l = mid+1; } } 第二种 public void search(int[] arr,int target){ int l = 0;int r =原创 2021-03-08 09:06:34 · 110 阅读 · 0 评论 -
不一样的回文数
不一样的回文数 1. 第一眼看上去脑中要想到一定会有一个回文数判定的函数,还会有一个两数相加的函数,要注意两数相加注意进位 2. 两个数相加不一定是十进制的还有可能是二进制的等等,比如二进制相加从后面一个一个的加,所以在声明是声明一个字符串变量保存数,然后在将字符串转换为整型数组进行相加计算 3. 还要注意在字符串与整型数组相互转换时要考虑处理16进制数的情况,所以判断该字符是否是字母,如果是将A-F转化成10~15 下面开始写代码 #include<iostream> #include &原创 2020-05-15 16:53:16 · 739 阅读 · 0 评论