acwing
文章平均质量分 50
小齐不怕小韩
学习、努力、改变
展开
-
快速幂
快速幂:即求a^k%p的值思路:通过将k用二进制去表示,即用k=2^0…… +2^t表示,去进行计算例题:acwing 875题给定n组ai,bi,pi,对于每组数据,求出ai^pi mod pi的值。输入格式第一行包含整数n。接下来n行,每行包含三个整数ai,bi,pi。输出格式对于每组数据,输出一个结果,表示ai^pi mod pi的值。每个结果占一行。数据范围1≤n≤100000 ,1≤ai,bi,pi≤2∗109输入样例:23 2 54 3 9输出样例:41#原创 2021-01-30 11:55:20 · 118 阅读 · 0 评论 -
质数
质数的判定-试除法例题:acwing867题(试除法判定质数)给定n个正整数ai,判定每个数是否是质数。输入格式第一行包含整数n。接下来n行,每行包含一个正整数ai。输出格式共n行,其中第 i 行输出第 i 个正整数ai是否为质数,是则输出“Yes”,否则输出“No”。数据范围1≤n≤100,1≤ai≤231−1输入样例:226输出样例:YesNo#include <bits/stdc++.h>using namespace std;bool is_pr原创 2021-02-27 19:29:49 · 144 阅读 · 0 评论 -
容斥原理
例题:acwing890题(能被整除的数)给定一个整数n和m个不同的质数p1,p2,…,pm。请你求出1~n中能被p1,p2,…,pm中的至少一个数整除的整数有多少个。输入格式第一行包含整数n和m。第二行包含m个质数。输出格式输出一个整数,表示满足条件的整数的个数。数据范围1≤m≤16,1≤n,pi≤10^9输入样例:10 22 3输出样例:7#include <bits/stdc++.h>using namespace std;typedef long l原创 2021-03-02 20:55:21 · 112 阅读 · 0 评论 -
约数
试除法求约数例题:acwing869题(试除法求约数)给定n个正整数ai,对于每个整数ai,请你按照从小到大的顺序输出它的所有约数。输入格式第一行包含整数n。接下来n行,每行包含一个整数ai。输出格式输出共n行,其中第 i 行输出第 i 个整数ai的所有约数。数据范围1≤n≤100,2≤ai≤2∗10^9输入样例:268输出样例:1 2 3 61 2 4 8#include <bits/stdc++.h>using namespace std;vecto原创 2021-02-27 21:22:34 · 236 阅读 · 0 评论 -
DFS与BFS
DFS例题1:acwing842题(排列数字)给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1#include <bits/stdc++.h>using namespace std;int n;int path[10]原创 2021-02-25 10:43:00 · 106 阅读 · 0 评论 -
链表及其基本操作
1.链表的定义链表:由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。//我们用结构体去存储每一个节点//此处进行结构体的定义并进行重命名typedef struct Node{ int data; struct Node*next;}Node;2.创建单链表创建单链表常见的有头插法和尾插法两种,下面我们进行简单介绍:(1).头插法步骤:(假设要加入的新节点的数据域是x)1.创建头节点head,并且将头结点hea原创 2021-05-30 09:17:34 · 664 阅读 · 18 评论 -
并查集
例题:acwing836题(合并集合)一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于每个询问指令”Q a b”,都要输出一个结果,如果a和b在同一集合内,则输出“Ye原创 2021-03-03 14:29:03 · 117 阅读 · 2 评论 -
高精度
高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35#include <bits/stdc++.h>using namespace std;vector<int> add(vector<int> A,vector<int> B){ vector<int> C; int t=0;原创 2021-02-02 10:05:34 · 162 阅读 · 0 评论 -
双指针算法,位运算,离散化,区间合并
双指针算法例题:acwing799题(最长连续不重复子序列)给定一个长度为n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3#include <bits/stdc++.h>using namespace std;in原创 2021-02-19 20:16:24 · 312 阅读 · 2 评论 -
前缀和与差分
1.前缀和一维前缀和例题:acwing795题(前缀和)输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样原创 2021-02-18 16:10:52 · 210 阅读 · 2 评论 -
快速排序和归并排序
快速排序模板题给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 1 2 4 5输出样例:1 2 3 4 5#include <bits/stdc++.h>using namespace std;in原创 2021-02-01 21:32:30 · 306 阅读 · 0 评论 -
二分
整数二分模板题给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤1原创 2021-02-01 21:38:55 · 114 阅读 · 0 评论 -
质数问题
题目链接给定两个整数 n 和 k,请你判断在 [2,n] 的范围内是否存在不少于 k 个质数,满足可以表示为两个相邻质数与 1 的和。例如,19 满足条件,因为 19=7+11+1。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据占一行,包含两个整数 n 和 k。输出格式每组数据输出占一行,如果存在不少于 k 个质数满足条件则输出 YES,否则输出 NO。数据范围1≤T≤30,2≤n≤1000,0≤k≤1000输入样例:527 245 72 015 117原创 2021-08-06 11:01:48 · 261 阅读 · 0 评论 -
交换相邻元素
交换相邻元素给定一个长度为 n 的数组 a1,a2,…,an。该数组是一个 1∼n 的排列。数组的前 n−1 个位置中,部分位置可以进行交换操作,将该位置的元素与后面相邻位置的元素进行互换。交换操作的次序和次数均不限。请你判断给定的数组能否通过交换操作变为一个升序数组。输入格式第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。第三行包含一个长度为 n−1 的 01 字符串,第 i 个字符为 1 表示第 i 个位置可以进行交换操作,第 i 个字符为 0 表示第 i 个位置无法原创 2021-08-05 14:20:53 · 2007 阅读 · 0 评论 -
平衡数组
平衡数组给定一个长度为 n 的数组 a1,a2,…,an,其中 ai=i。现在,请你选择一个整数 m,并对该数组进行 m 次操作。对于第 i 次操作(i 从 1 开始计数),你需要选定其中一个元素,并将选定元素以外的其他所有元素都增加 i。你的目标是在 m 次操作结束后,数组中各个元素的值都相等。m 不得超过 1000。请你输出具体合理方案。输入格式:第一行包含整数 T,表示共有 T 组测试数据。每组数据占一行,包含一个整数 n。输出格式:每组数据输出占两行。第一行输出操作次数 m。原创 2021-08-03 18:07:20 · 574 阅读 · 0 评论 -
数组中只出现一次的两个数字
数组中只出现一次的两个数字一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1,2,3,3,4,4]输出:[1,2]解析:对于本题我们可以利用异或^的性质,也即两个相同的数异或为0,一个数与0异或还是等于原来的数。 本题中由于只有两个数出现了一次,而其它数均出现了两次,因此我们可以利用sum=0区异或数组nums中的每一个数,可以得到sum=x^y(x和y即为我们所求的两个数),由于x!=y,因此x和y中原创 2021-05-01 20:45:55 · 797 阅读 · 0 评论 -
丑数
acwing62题:丑数 (剑指offer)我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含质因子 7。求第 n 个丑数的值。样例输入:5输出:5注意:习惯上我们把 1 当做第一个丑数。解析:本题采用归并排序的思想,将元素1以及分别将2,3,5的倍数所组成的数组中的元素合并(去重后)到一个新的数组中,则这个数组就是由丑数所组成的集合class Solution {public: int getUg原创 2021-04-11 21:21:36 · 94 阅读 · 0 评论 -
二维数组中的查找
二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。样例输入数组:[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]如果输入查找数值为7,则返回true,如果输入查找数值为5,则返回false。class Solution {public: bool searchArray(v.原创 2021-04-10 17:02:44 · 95 阅读 · 0 评论 -
不用加减乘除做加法
acwing85题:不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用 +、-、×、÷ 四则运算符号。样例输入:num1 = 1 , num2 = 2输出:3解析:1.num1 + num2 分为2个部分,num1^num2是不进位加法,(num1&num2) << 1是进位,二者相加就起到了相同的作用。2.因为num1 + num2 = num1^num2 + ((num1&num2) << 1),所以说 还是会用到加号+,对此我原创 2021-03-22 15:07:32 · 91 阅读 · 0 评论 -
每日一题4
acwing3257题:跳一跳近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。如果跳到了方块上,但没有跳到方块的中心则获得 1 分;跳到方块中心时,若上一次的得分为 1 分或这是本局游戏的第一次跳跃则此次得分为 2 分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将 +2,+4,+6,+8…)。现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。输入格式输入原创 2021-02-20 21:41:02 · 214 阅读 · 0 评论 -
每日一题3
acwing3203题:画图在一个定义了直角坐标系的纸上,画一个 (x1,y1) 到 (x2,y2) 的矩形指将横坐标范围从 x1 到 x2,纵坐标范围从 y1 到 y2 之间的区域涂上颜色。下图给出了一个画了两个矩形的例子。第一个矩形是 (1,1) 到 (4,4),用绿色和紫色表示。第二个矩形是 (2,3) 到 (6,5),用蓝色和紫色表示。图中,一共有 15 个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同原创 2021-02-18 12:05:38 · 293 阅读 · 0 评论 -
走方格
acwing822题:走方格给定一个n*m的方格阵,沿着方格的边线走,从左上角(0,0)开始,每次只能往右或者往下走一个单位距离,问走到右下角(n,m)一共有多少种不同的走法。输入格式共一行,包含两个整数n和m。输出格式共一行,包含一个整数,表示走法数量。数据范围1≤n,m≤10输入样例:2 3输出样例:10#include <bits/stdc++.h>using namespace std;int n,m,sum;void dfs(int x,int y)原创 2021-02-15 17:40:09 · 2237 阅读 · 8 评论 -
每日一题2
acwing1477题:拼写正确给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。输入格式共一行,包含一个整数 N。输出格式共一行,用英语输出总和的每个数字,单词之间用空格隔开。数据范围0≤N≤10^100输入样例:12345输出样例:one five#include <bits/stdc++.h>using namespace std;int main(void){ string str; int sum=0原创 2021-02-15 10:50:47 · 2362 阅读 · 4 评论 -
字符串部分的典型例题(难)
acwing776题:字符串移位包含问题对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。输入格式共一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。输出格式如果一个字符串是另一字符串通原创 2021-02-12 19:14:45 · 731 阅读 · 2 评论 -
每日一题
acwing441题请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。 比如给定范围[2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1 次,在数 21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6 次。输入格式输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。输出格式输出共 1 行,表示数字 2 出现的次数。数据范围1≤L≤R≤10000输入样例:2 22输出样例:原创 2021-02-12 10:24:36 · 1600 阅读 · 7 评论 -
数组去重
acwing817题给定一个长度为n的数组a,请你编写一个函数:int get_unique_count(int a[], int n); // 返回数组前n个数中的不同数的个数输入格式第一行包含一个整数n。第二行包含n个整数,表示数组a。输出格式共一行,包含一个整数表示数组中不同数的个数。数据范围1≤n≤1000输入样例:51 1 2 4 5输出样例:4//方法1#include <bits/stdc++.h>using namespace std;in原创 2021-02-09 10:54:31 · 666 阅读 · 0 评论 -
字符串部分的典型例题
acwing775题写这一题的过程中我发现我原来一直对字符串存在许多误解,以为没有字符串数组,实际上字符串和其它类型一样都存在数组,而本题通过字符串数组求解则十分简单编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。输入格式输入为一个字符串(字符串长度至多为100)。输出格式输出为按要求排序后的字符串。输入样例:I am a student输出样例:student a am I#include <bits/stdc+原创 2021-02-08 21:30:21 · 1013 阅读 · 0 评论 -
字符串部分的典型例题之去掉多余的空格
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式共一行,包含一个字符串。输出格式输出去掉多余空格后的字符串,占一行。数据范围输入字符串的长度不超过200。输入样例:Hello world.This is c language.输出样例:Hello world.This is c language.cin做法#include <iostream>using namespace std;int main()转载 2021-02-07 20:55:49 · 1209 阅读 · 0 评论 -
蛇形矩阵
acwing756题输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。具体矩阵形式可参考样例。输入格式输入共一行,包含两个整数n和m。输出格式输出满足要求的矩阵。矩阵占n行,每行包含m个空格隔开的整数。数据范围1≤n,m≤100输入样例:3 3输出样例:1 2 38 9 47 6 5#include <bits/stdc++.h>using namespace std;int res[110][110];int原创 2021-02-07 11:53:23 · 128 阅读 · 0 评论 -
平方矩阵
acwing753题输入整数N,输出一个N阶的回字形二维数组。数组的最外层为1,次外层为2,以此类推。输入格式输入包含多行,每行包含一个整数N。当输入行为N=0时,表示输入结束,且该行无需作任何处理。输出格式对于每个输入整数N,输出一个满足要求的N阶二维数组。每个数组占N行,每行包含N个用空格隔开的整数。每个数组输出完毕后,输出一个空行。数据范围0≤N≤100输入样例:123450输出样例:11 11 11 1 11 2 11 1 11 1 1 11 2原创 2021-02-06 20:39:16 · 3425 阅读 · 1 评论