C/C++/算法/数据结构
文章平均质量分 69
C/C++/算法/数据结构
你的莽莽没我的好吃
这个作者很懒,什么都没留下…
展开
-
最长美丽子串
单点时限: 1.0sec内存限制:512 MB给定长度为n的字符串S,定义其子字符串为S中连续的字符所组成的字符串。若个字符串的每一个字符都独一 无二,那么我们称这样的字符串是美丽的,例如abc是美丽的,但是abb不是美丽的。请输出S的最长美丽子串的长度。输入格式一行一个字符串S输出格式一行一个整数,表示答案。样例1input1abcddbcdoutput14样例2input1aaaaoutput11样例3input1原创 2022-03-31 15:23:31 · 357 阅读 · 0 评论 -
C++ STL 结构体作为map的键
在使用map等关联式容器时,用结构体作为键时,在用到键比较的场合时会报错,键无法比较。比如:map每次插入新元素都需要比较键,自动排序。 map.count(key)对某一键计数。因为键是我们自定义的,编译器找不到类似模板,无法比较。我们自己重载<运算符即可,指出我们在比较结构体时具体是比较哪个成员变量。struct Test{ string data; int x; bool operator<(const package& tmp) con原创 2022-02-12 11:22:45 · 774 阅读 · 0 评论 -
KY155 To Fill or Not to Fill
描述With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to原创 2022-02-09 12:06:05 · 260 阅读 · 0 评论 -
KY4 代理服务器
描述 使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私。我们知道n个代理服务器的IP地址,现在要用它们去访问m个服务器。这 m 个服务器的 IP 地址和访问顺序也已经给出。系统在同一时刻只能使用一个代理服务器,并要求不能用代理服务器去访问和它 IP地址相同的服务器(不然客户端信息很有可能就会被泄露)。在这样的条件下,找到一种使用代理服务器的方案,使得代理服务器切换的次数尽可能得少。输入描述: 每个测试数据包括 n + m + 2 行。 第 1 行只包...原创 2022-02-07 23:59:12 · 355 阅读 · 0 评论 -
KY58 Repeater
提交网址:http://t.cn/E9jcaVb描述Harmony is indispensible in our daily life and no one can live without it----may be Facer is the only exception. One day it is rumored that repeat painting will create harmony and then hundreds of people started their endless原创 2022-01-23 11:16:22 · 849 阅读 · 0 评论 -
C++上机常用函数方法及经典代码段汇总
持续更新中……1、求反序数求一个非负整数data的反序数。/* 每一次循环: 先将res整体左移空出个位, 将data末尾位加到res个位, 砍掉data末尾位。*/int reverse(int data){//计算反序数 int res = 0; while(data){ res *= 10; res += data % 10; data /= 10; } return re原创 2022-01-21 18:35:31 · 866 阅读 · 0 评论 -
C++ sort()函数(重制版)
头文件#include<algorithm>使用的是什么算法?参考:https://blog.csdn.net/qq_35440678/article/details/80147601用到的是快速排序,但不完全是快速排序,还结合了插入排序和堆排序。快速排序时间复杂度并不是稳定的O(nlogn),在排序表接近基本有序或逆序时,会退化成O(n^2)。 在数据量小的情况下,递归所造成的内存消耗不划算。 递归深度很大的情况下,空间消耗很大。所以sort采取的排序方法如下:数据转载 2021-02-03 13:04:41 · 893 阅读 · 1 评论 -
串:KMP算法
//KMP算法(包括改进KMP算法)#define MAXLEN 25#include<stdio.h>#include<string.h>typedef struct{ char ch[MAXLEN];//ch[0]不用,从ch[1]开始存,位序与下标相等,能存24个数据元素 int length;}SString;void get_next(SString T,int next[]){//求next数组 int i=1,j=0;//next[i]=...原创 2020-05-15 23:35:37 · 818 阅读 · 0 评论 -
朴素(简单)模式匹配
子串的定位操作通常称为串的模式匹配,它求的是子串(模式串)在主串中的位置算法思想:从主串S的第一个字符起,与模式串T的第一个字符开始比较,若相等,则继续逐个匹配后续字符;若不相等,则主串指针回退,从下一个字符起与模式串重新比较;以此类推,若模式串全部匹配完,则匹配成功;若走完全部主串模式串还没走完,则匹配失败。//朴素模式匹配//子串的定位操作通常称为串的模式匹配,它求的是子串(模式串)在主串中的位置#define MAXLEN 25#include<stdio.h>原创 2020-05-12 23:13:56 · 522 阅读 · 0 评论 -
操作受限的线性表:链队列
队列的链式表示叫作链队列和栈的链式存储一样,都是单链表的阉割版以下实现的是带头结点的链队列(成员变量有结构体的结构体在访问成员时用->,其余用.)//队列的链式表示叫作链队列//和栈的链式存储一样,都是单链表的阉割版//以下实现的是带头结点的链队列 //(成员变量有结构体的结构体在访问成员时用->,其余用.)//Elemtype:int #include<...原创 2020-05-07 21:21:05 · 253 阅读 · 0 评论 -
操作受限的线性表:循环队列
队列也是一种操作受限的线性表一般的队列的顺序存储结构有很大弊端:“假溢出”利用取余(模)运算将顺序队列臆造为一个环状的空间,即把存储队列元素的表从逻辑上视为一个环,成为循环队列以下实现牺牲一个单元来区分队空还是队满//队列是一种操作受限的线性表//一般的队列的顺序存储结构有很大弊端:“假溢出”//利用取余(模)运算将顺序队列臆造为一个环状的空间, //即把存储队列元素的表从...原创 2020-05-06 22:02:27 · 287 阅读 · 0 评论 -
操作受限的线性表:顺序栈
栈(stack):操作受限的线性表栈的顺序存储实现:顺序栈//栈(stack)--操作受限的线性表//栈的顺序存储实现--顺序栈//ElemType:int #include<stdio.h>#define MaxSize 10typedef struct{ int data[MaxSize];//静态数组存放栈中元素 int top;//栈顶指针指向栈顶元素的...原创 2020-05-05 23:04:11 · 232 阅读 · 0 评论 -
线性表:单链表
链表:线性表的链式存储实现。单链表//线性表的链式存储实现--链表//链表包括:单链表、双链表、循环链表、静态链表。 //以下实现的是带头结点的单链表 //Elemtype:int #include<stdio.h>#include<stdlib.h>typedef struct LNode{ int data;//数据域 struct LNod...原创 2020-04-28 21:52:04 · 272 阅读 · 0 评论 -
函数传值、传指针、传引用、传指针的引用
传值function(int A);//A形参int main(){ function(a);//a实参 return 0;}系统在内存里生成一个a的复制。传指针function(int* p2);//p2形参int main(){ int* p = a; function(p);//p实参 return 0;}实参p是一个指向a的指针,传指...原创 2020-04-26 00:23:07 · 239 阅读 · 0 评论 -
线性表:顺序表(静态分配、动态分配)
顺序表:线性表的顺序存储实现。静态分配方式静态分配一个数组,由于没有使用动态分配内存的方式(malloc),所以并没有DestroyList(&L)函数,在程序结束后会自动销毁该数组。重要的操作有:InitList(&L) :初始化顺序表。 ListInsert(&L,i,e):在L的位序i处插入元素e。 ListDelete(&L,i,&e...原创 2020-04-21 18:29:28 · 5600 阅读 · 0 评论 -
递归与递推:钥匙计数之一
B - 钥匙计数之一HDU - 1438一把锁匙有N个槽,槽深为1,2,3,4。每锁匙至少有3个不同的深度且至少有1对相连的槽其深度之差为3。求这样的锁匙的总数。Input本题无输入Output对N>=2且N<=31,输出满足要求的锁匙的总数。Sample OutputN=2: 0N=3: 8N=4: 64N=5: 360.........原创 2019-11-13 19:36:29 · 278 阅读 · 0 评论 -
递归与递推:一只小蜜蜂
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。Sam...原创 2019-11-13 16:18:32 · 734 阅读 · 0 评论 -
《程序员代码面试指南》:用一个栈实现另一个栈的排序
【题目】一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?【难度】☆【解答】将要排序的栈记为stack,申请的辅助栈为help。在stack上执行pop操作,弹出的元素记为cur。如果cur小于或等于help的栈顶元素,则将cur直接压入help栈内。 如果cur大于he...原创 2019-08-06 14:44:30 · 336 阅读 · 0 评论 -
《程序员代码面试指南》:如何仅用递归函数和栈操作逆序一个栈(同时谈谈对递归的理解)
【题目】一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但只能用递归函数来实现,不能用其他数据结构。【难度】☆☆【解答】(其实不考虑其它,完全可以另外开一个栈做个中转,但是这道题就是要让你节省空间,只使用一个栈。)设计两个递归函数。递归函数一:移除并取得栈底元素。...原创 2019-08-05 14:21:49 · 253 阅读 · 0 评论 -
枚举深度优先:棋盘问题POJ-1321
A - 棋盘问题POJ - 1321在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数...原创 2019-03-18 20:21:44 · 235 阅读 · 0 评论 -
C++sort()函数用法
头文件:#include<algorithm>1.sort(&arr[begin],&arr[end]) 对一个数组的[begin,end]范围进行升序排序2. sort(&arr[begin],&arr[end],cmp) 增加一个参数,可升序可降序例:struct node //创建一个结构体代表每一个活动 { i...原创 2019-03-10 20:08:26 · 1521 阅读 · 0 评论 -
最大公约数:CodeForces-389A
B - Fox and Number GameCodeForces - 389AFox Ciel is playing a game with numbers now.Ciel hasnpositive integers:x1,x2, ...,xn. She can do the following operation as many times as needed: se...原创 2019-03-10 19:47:13 · 365 阅读 · 0 评论 -
贪心算法:CodeForces-597B
C - RestaurantCodeForces - 597BA restaurant receivednorders for the rental. Each rental order reserve the restaurant for a continuous period of time, thei-th order is characterized by two tim...原创 2019-03-10 19:32:21 · 323 阅读 · 0 评论 -
今就跟scanf,getchar,gets输入问题做个了断!
gets()函数函数原型:char* gets(char*)头文件:stdio.h功能:从标准输入设备读取字符串,可以无限读取,不会判断上限,直至接收到换行符或EOF时停止(所以应该保证buffer的空间足够大,以免发生溢出),并将读取的结果存放在指定的字符数组(传入的作为参数的数组指针)中,换行符不作为读取的字符串的内容,gets()并不将换行符存入缓冲区,读取的换行符被转换为"\0...原创 2018-10-17 21:34:32 · 427 阅读 · 1 评论 -
被释放的指针,空指针,void指针 辨析
做了一道题,虽然问题的侧重点不在于指针,但是引发了我对一些指针相关内容的思考,发现自己没有真正地去认真思考这些问题……在此做个了断。被释放的指针当动态内存分配的时候,用完指针,就要将其释放掉,delete和free函数一样,不修改它参数对应指针指向的内容,也不修改指针本身,只是在堆内存管理结构中将指针指向的内容标记为可被重新分配。就是告诉系统这个地址的内存我已经不用了,系统可以重新分配给别...原创 2018-09-15 16:45:31 · 2047 阅读 · 0 评论 -
痛心!一题可见余之弱鸡
1.计算下列级数的和直到。这道题是老生长谈了,首先我的第一反应就是找规律,找分子分母的跟据该项的顺序变化规律,然后算法就是在迭代的过程中分别变化分子分母然后相除,把分子分母的计算给分开了。#include<stdio.h>double S(int x){ int n = 1; double s = 1; //结果 double a = x; //每一项的分...原创 2018-09-14 20:45:34 · 235 阅读 · 0 评论 -
C语言动态内存分配
思维导图:内存分配的方式:1.在静态存储区中进行分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,静态变量(static)。2.在栈中进行分配在执行函数时,函数内部局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储被自动释放,效率很高,但是分配的内容比较有限。3.在堆中分配在堆上分配也称为动态内存分配:程序在运行的时候...转载 2018-09-09 15:40:36 · 233 阅读 · 0 评论 -
分治算法递归——汉诺塔问题
分治算法的精髓即为分治即分而治之,一个问题规模过大不容易直接解决,就可以划分成许多小问题,解决这些小问题,再将小问题的解合并成大问题的解。递归的精髓就是要找到问题中的重复部分,然后解决该重复部分,把问题的规模减小但是解决的方法不变,在函数里调用自身。大而化小,小而化了。假如一个问题能表示成 类似于“F(n) = F(n-1)的函数 ”,就可以用递归。汉诺塔问题描述:有A,B,C三根柱...原创 2018-09-09 11:20:53 · 740 阅读 · 0 评论 -
C++中char 与 string 之间的互相转换问题
c++ 中 char 与 string 之间的相互转换问题 - devilmaycry812839668 - 博客园https://www.cnblogs.com/devilmaycry812839668/p/6353807.html第一部分:将 char * 或者 char [] 转换为 string可以直接赋值,转换。 第二部分:将 ...转载 2018-06-16 10:25:30 · 807 阅读 · 0 评论 -
关于strtok()函数的小小的理解
函数原型:char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。用法:#include <string.h>#include <stdio.h>int main(){ const char str[80] = "This is - www.w3cschool....原创 2018-02-27 13:39:50 · 392 阅读 · 0 评论 -
警示记录2:C语言不允许返回一个完整的数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下:int * myFunction(){ static int r[10];... return r;}int main (){ /* 一个指向整数的指针 */ int *p;...原创 2018-02-26 13:42:38 · 393 阅读 · 0 评论 -
EOF 和 \n
EOF是C/C++里面的宏定义,具体定义式是#define EOF -1,表示的是文件的结束标志,值等于-1,一般用在文件读取的函数里面,比如fscanf fgetc fgets等,一旦读取到文件最后就返回EOF标志并结束函数调用。 '\n'表示换行符(回车),通常用作一些读取函数的读取结束标志,比如scanf,getchar(),gets()等,一旦遇到'\n'就结束读取并返回那么,如...原创 2018-02-25 19:44:05 · 2164 阅读 · 1 评论 -
拉丁方阵
编写程序,由用户输入一个数,构造相应的所有 N×N 阶的拉丁方阵(2≤N≤9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时,其中一个拉丁方阵为:1 2 3 42 3 4 13 4 1 24 1 2 3#include<stdio.h>int main(){ int i,j,k,t,N; scanf("%d", &N); for(j=0;j<N;...原创 2018-02-18 13:35:56 · 1687 阅读 · 0 评论 -
警示记录1:flag+break标记想要的结果并跳出循环输出结果
#include<stdio.h>int main(){ int a,b; int flag; for(a=0;a<10;a++) { for(b=0;b<10;b++) { if(......) flag=1; else flag=0; } if(flag==1) break; else conti...原创 2018-02-16 23:36:34 · 1003 阅读 · 0 评论 -
字符串输出
字符串输出区别于整形或字符1. char n[ ]="hello"; // char n[ ]={'h','e','l','l','o','\0'};printf("%s",n); //字符串数组地址(就暂时理解为地址吧,好记)//数组名2. char *n="hello"; // char (*n)[ ]="hello";printf("%s",n);原创 2018-01-01 14:27:56 · 399 阅读 · 0 评论 -
阶乘的几种表示方法及其拓展
(a)读入一个非负整数,计算并打印阶乘。错解:#include int main(){int x,i; //输入一个整数,计数//scanf("%d",&x);for(i=1;i<=x;i++)x*=(x-1);printf("%d",x);return 0;}自以为天衣无缝,实则白痴一个比如我。1. 第一次执行完以后:x=5*(5-1)=20 i=2 没错,但是x变成20了啊啊啊...原创 2017-12-04 19:39:41 · 6227 阅读 · 1 评论 -
如何判断C语言输入类型正确与否
今天问了老师终于搞清楚了,虽然很简单的一个问题,但是还是想写一下。让我们来先看一下int x = scanf("%d", &a);如果输入一个整形数据,符合该数据类型的要求,则返回值x=1(正确读取的数据数量为1)当你键入一个字符,如*,c……不符合该输入数据类型的要求,于是返回值x = 0(判断为假)——————————————————手动分割线————————————...原创 2017-12-04 19:35:36 · 7784 阅读 · 3 评论