算法与编程(acm)
文章平均质量分 50
acm竞赛
睡不醒的凉白开
山不见我,我自去见山。
展开
-
PTA 打印沙漏
1.题目详情 - L1-002 打印沙漏 (20 分) (pintia.cn)题目:L1-002 打印沙漏本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印***** *** * ********所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。输...原创 2022-03-05 17:28:43 · 274 阅读 · 0 评论 -
string 的常见用法详解
目录1.string 的定义2.string 中内容的访问3.string 常用函数实例解析 在C语言中,一般使用字符数组 char str[]来存放字符串,但是使用字符串数组有时会显得操作麻烦,在C++中加入了string类型。 注意,如果要使用string,需要添加 string头文件,即# include<string> (注意 string. h 和 string 是不一样的头文件)。除此之外,还需要在头文件下面加上一句:“ using namesp...原创 2022-03-02 20:32:49 · 12330 阅读 · 0 评论 -
memset ——对数组中的每一个元素赋相同的值
如果需要对数组中的每一个元素赋以相同的值,例如对数组初始化为0或是其他的一些数,就有可能要使用相关的函数。一般来说给数组中每一个元素赋相同的值有两种方法:memset 函数和fill 函数。这里先介绍memset函数。memset函数格式为:memset(数组名,值,sizeof(数组名)); 需要注意的是,使用memset函数需要在程序开头添加string.h头文件,只建议初学者使用memset赋0或-1。这是因为memset使用按字节赋值,即对每个字节赋同样的值,这样...原创 2022-03-02 15:18:01 · 1775 阅读 · 0 评论 -
【转】ACM各种WA的说明及可能的原因
转载地址:ACM各种WA的说明及可能的原因_ROOM-CSDN博客_mle的原因1、答案错误 ——wrong answer 就是最常见的。这个没办法,基本是程序有些细节的点没有考虑到。2、运行错误 ——Runtime Error 大致两种情况1、是数组开太小,要存的数据太大,数组调大就OK了。2、是数组发生越界操作,基本上是程序执行时访问到了不该访问的地方,程序问题了。3、格式错误 ——presentation error 非常接近AC了。空格或者回车多输或者少输了。看题意再检查下..转载 2022-02-28 11:13:22 · 912 阅读 · 0 评论 -
明明的随机数(快速排序,STL解法,C语言)
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个11到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入格式输入有两行,第1行为1个正整数,表示所生成的随机数的个数N第2行有N个用空格隔开的正整数,为所产生的随机数。输出格式输出也是两行,第1行为1个正整数M,表示..原创 2022-02-22 21:12:07 · 789 阅读 · 0 评论 -
基础算法模板(六)——离散化与区间合并
离散化:vector<int> alls; // 存储所有待离散化的值sort(alls.begin(), alls.end()); // 将所有值排序alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重复元素// 二分求出x对应的离散化的值int find(int x) // 找到第一个大于等于x的位置{ int l = 0, r = alls.size() - 1; while原创 2022-02-08 15:04:34 · 431 阅读 · 0 评论 -
基础算法模板(五)——位运算和双指针算法
位运算:求n的第k位数字: n >> k & 1返回n的最后一位1:lowbit(n) = n & -n双指针算法:for (int i = 0, j = 0; i < n; i ++ ){ while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑}常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并...原创 2022-02-08 15:02:02 · 493 阅读 · 0 评论 -
基础算法模板(四)——前缀和与差分
一维前缀和 :S[i] = a[1] + a[2] + ... a[i]a[l] + ... + a[r] = S[r] - S[l - 1]二维前缀和 :S[i, j] = 第i行j列格子左上部分所有元素的和以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]一维差分:给区间[l, r]中的每个数加上c:B[l] += c, B[r原创 2022-02-08 14:57:38 · 541 阅读 · 0 评论 -
基础算法模板(三)——高精度运算
高精度加法:// C = A + B, A >= 0, B >= 0vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (int i = 0; i < A.size(); i ++ )原创 2022-02-08 14:45:45 · 295 阅读 · 0 评论 -
基础算法模板(二)——整数二分算法和浮点数二分算法
整数二分算法模板:bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; // check()判断mid是否满足性质原创 2022-02-08 14:35:36 · 620 阅读 · 0 评论 -
基础算法模板(一)——快速排序和归并排序
快速排序算法模板:void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i原创 2022-02-08 14:31:14 · 288 阅读 · 0 评论 -
最短路径Floyd算法应用——求最短路
如果大家想要了解Floyd算法思想可以看这篇博文题目描述:Floyd算法模板:初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d[i][j] = INF;// 算法结束后,d[a][b]表示a到b的最短距离void floyd(){ for..原创 2022-01-27 21:10:15 · 717 阅读 · 0 评论 -
最短路径Dijkstra算法应用
如果大家想要了解Dijkstra算法思想可以看这篇博文题目描述:Dijkstra算法模板:int g[N][N]; // 存储每条边int dist[N]; // 存储1号点到每个点的最短距离bool st[N]; // 存储每个点的最短路是否已经确定// 求1号点到n号点的最短路,如果不存在则返回-1int dijkstra(){ memset(dist, 0x3f, sizeof dist);//初始化为无穷大 dist[1] = 0; .原创 2022-01-27 21:04:16 · 444 阅读 · 0 评论 -
最短路径问题——Floyd算法详解(所有顶点之间的最短路径)
任意两点间最短路径与求单源最短路径不同,可以利用Floyd算法求任意两点之间的最短路径,这是源点就从单个确定的点变成了所有的点,即求每一个点到各个点之间的最短路径。当然,我们也可以用dijkstra算法对每个顶点都循环一次,也可以求得任意两点间最短路。弗洛伊德(Floyd)算法介绍:设顶点vi 到顶点vk 的最短路径已知为D[i,k],顶点vk 到vj 的最短路径已知为D[k,j],顶点vi 到vj 的路径为D[i,j],则vi 到vj 的最短路径为:min((D[i,k],D[k,j]原创 2022-01-25 23:14:53 · 5208 阅读 · 0 评论 -
最短路径问题——Dijkstra算法详解(单源最短路径)
单源最短路径单源最短路径,是指从图中任一点出发到其他各点之间的最短路径。Dijkstra算法介绍Dijkstra算法又称迪杰特斯拉算法,dijkstra算法的核心思想是将全部结点所在集合V分成两个集合,一个是已知最短路径的顶点集合S,剩下的是未知最短路径的集合T,同时记录每个结点到源点的最短距离dis。约定:源点到自身的最短距离为0,无路径的两点间的距离为无穷大。算法思路:Dijkstra算法步骤:初始时令S={v0},T={其余顶点}。第一步:从T中选取一个原创 2022-01-25 22:42:52 · 2965 阅读 · 0 评论 -
数据结构之哈希表
数据结构之哈希表(解决冲突常用方法)1.什么是哈希表2.构造哈希函数3.解决哈希冲突3.1.开放定址法(开地址法)3.2.链地址法(拉链法)1.什么是哈希表散列表(Hash table,也叫哈希表),是根据关键 码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来 访问记录,以加快查找的速度。这个映射函数叫做 散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字 值key,代入函数后若能得到包含该关键字的记录在原创 2022-01-24 18:03:49 · 7568 阅读 · 0 评论 -
前缀和与差分 (图文并茂 超详细整理)
可以看一下这篇文章,链接如下。博主超级厉害,关于前缀和与差分整理的特别详细。版权声明:本文转载自CSDN博主「林深时不见鹿」的原创文章,遵循CC 4.0 BY-SA版权协议,再次转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_45629285/article/details/111146240本文只是再次整理了一下原文其中一部分内容,方便自己理解和复习。如果大家想要更加全面的理解前缀和与差分的思想,可以看一下大佬的原文。1、前缀和前缀和是转载 2022-01-14 16:51:42 · 334 阅读 · 1 评论 -
【指纹锁】牛客网题号:NC17508 (用到set自定义排序)
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网题目描述HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁。该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说明两个指纹越相似,当两个指纹的数值差≤k时,这两个指纹的持有者会被系统判定为同一个人。现在有3种操作,共m个,操作1:add x,表示为指纹锁录入一个指纹,该指纹对应的数字为x,如果系统内有一个与x相差≤k的指纹,则系统会忽略这次添加操作操...原创 2022-01-12 22:24:25 · 91 阅读 · 0 评论 -
C++中auto关键字和for循环使用详解——for (auto a:b)
编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。C++中的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。C++11新标准引入了auto 类型说明符,让编译器去分析表达式的类型。和原来那些只对应一种特定类型的说明符(比如double)不同,auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值(与C语言中的auto定义变量不一样)#include<iostream>usi..原创 2022-01-12 21:22:10 · 4255 阅读 · 3 评论 -
【好串】牛客竞赛题目NC21874(对栈的理解运用)
链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网题目描述:牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串,根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串现在给你一个字符串s,判断s是否是好串。输入描述:输入一行包含一个字符串,长度不超过50原创 2022-01-12 21:06:44 · 865 阅读 · 0 评论 -
【求朋友数】set容器使用实例
用到了STL中的set容器。set是STL中一个很有用的容器,用来存储同一种数据类型的数据结构(可以称之为K的模型),基本功能与数组相似。set与数组不同的是,在set中每个元素的值都是唯一的。而且set插入数据时,能够根据元素的值自动进行排序。题目:如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”。例如 123和 51 就是朋友数,因为 1+2+3=5+1=6,而 6就是它们的朋友证号。给定一些整数,要求你统计一下它们中有多少个不同的朋友..原创 2022-01-10 21:58:40 · 92 阅读 · 0 评论 -
前缀和简单实例
实例:一维前缀和:给出n个数的序列,要求回答m次询问,输入一维数组,每次询问下标l到r的和。AC代码:#include<iostream>using namespace std;const int maxn=100005;int n ,m;int l,r;int q[maxn];long long sum[maxn];int main(){ cin>>n>>m; for(int i=1;i<=n;i++) { sc..原创 2022-01-05 22:10:19 · 270 阅读 · 0 评论 -
航电 OJ 1002 A+B Problem II (大数运算)
A + B Problem IIProblem DescriptionI have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.InputThe first line of the input contains an integer T(1<=T<=20) which means the number of test cases原创 2022-01-03 21:35:52 · 208 阅读 · 0 评论