自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++ 前缀和简易模板(一维、二维)

//一维前缀和#include<iostream>using namespace std;int a[100005];int sum[100005];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; sum[i]=sum[i-1]+a[i]; } int l,r; for(

2021-04-13 16:52:56 592

原创 C++ 常用算法模板集合(蓝桥杯、天梯赛等)

C++ Dijkstra简易模板C++ Kruskal简单模板C++五种排序简易模板C++ 区间合并模板C++ 二分查找模板(普通、左边界、右边界)C++ 最长上升子序列模板C++ Trie(字典树)模板

2021-04-13 16:46:21 2107

原创 C++ 试除法判断质数

#include<iostream>using namespace std;bool is_prime(int x){ if(x<2) return false; for(int i=2;i<=x/i;i++) { if(x%i==0) return false; } return true;}int main(){ int t; cin>>t; for(int i=0;i<

2021-04-13 16:38:46 412

原创 第二届全国大学生算法设计与编程挑战赛(冬季赛)关于哥俩好的数字这件事 题解

Description这题是个签到题。数字 x,y 是个「哥俩好」数字,当且仅当数字 x 的数位和与数字 y 的数位和相同。你需要找 n 个不同的正整数,使得这 n 个数字两两之间均为「哥俩好」数字且总和最小。Input一个整数 n , 1≤n≤5000Output最小的「哥俩好」数字总和。Sample Input 15Sample Output 1110Sample Input 22Sample Output 211Hint对于样例2,我们可以选择1+10,故输出11思

2021-03-17 18:45:36 635

原创 482. 合唱队形(最长上升子序列)AcWing寒假每日一题 入门组(4)

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1<…Ti+1>…>TK(1≤i≤K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入格式输入的第一行是一个整数N,表示同学的总数。第二行有n个整数,用空格分隔,第i个整数Ti是第i位同学的身高(厘米)。输出格

2021-01-30 12:55:54 187

原创 1414. 牛异或(Trie字典树+前缀和思想)AcWing寒假每日一题 提高组(3)

题目链接题目:农夫约翰在给他的奶牛们喂食时遇到了一个问题。他共有 N 头奶牛,编号 1∼N。每次喂食前,这 N 头奶牛会按照 1∼N 的顺序站成一排。此外,每头奶牛都被分配了一个可能不唯一的整数。那么所有被分配的整数就形成了一个长度为 N 的整数序列。请你在该整数序列中找出一个连续的子序列,使得子序列中元素的异或和能够最大。如果存在多个这样的序列,那么选择序列末端整数对应的奶牛编号更小的那个序列。如果仍然存在多个可选的序列,那么选择长度最短的那个序列。输入格式第一行包含整数 N。第

2021-01-30 12:08:05 203

原创 C++ Trie(字典树)模板

int son[N][26], cnt[N], idx;// 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点// cnt[]存储以每个节点结尾的单词数量// 插入一个字符串void insert(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a'; if (!son[p][u]) son[p][u] = ++ i

2021-01-30 11:55:26 681

原创 C++ 最长上升子序列模板

//从左到右 for(int i=0;i<n;i++) { f1[i]=1; for(int j=0;j<i;j++) { if(a[i]>a[j]) f1[i]=max(f1[i],f1[j]+1); } res=max(res,f1[i]); } //从右到左 for(int i=n-1;i>=0;i--) {

2021-01-29 16:26:00 402

原创 479. 加分二叉树(区间DP)AcWing寒假每日一题 提高组(2)

题目链接题目:设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加分为1。叶子的加分就是叶节点本身的分数,不考虑它的空子树。试求一棵符合中序遍历为(1,2,3,…,n)

2021-01-29 12:00:03 193

原创 1381. 阶乘 (因式分解)AcWing寒假每日一题 入门组(3)

题目链接题目:N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。阶乘运算的结果往往都非常的大。现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。输入格式共一行,包含一个整数 N。输出格式输出一个整数,表示 N! 的最右边的非零数字。数据范围1≤N≤1000输入样例:7输出样例:4思路:我们可以这么理解,因为0只可能由2的倍数和5的倍数相乘得

2021-01-28 12:56:58 129 1

原创 1227. 分巧克力 (二分)AcWing寒假每日一题 入门组(1)

题目链接题目:儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。切出的巧克力需要满足:1.形状是正方形,边长是整数2.大小相同例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3 的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?输入格式第一行包

2021-01-28 12:52:53 104

原创 680. 剪绳子 (浮点型二分)AcWing寒假每日一题 入门组(2)

题目链接题目:有N根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对N根绳子进行任意裁剪(不能拼接),请你帮忙计算出这M根绳子最长的长度是多少。输入格式第一行包含2个正整数N、M,表示原始绳子的数量和需求绳子的数量。第二行包含N个整数,其中第 i 个整数Li表示第 i 根绳子的长度。输出格式输出一个数字,表示裁剪后最长的长度,保留两位小数。数据范围1≤N,M≤100000,0<Li<109输入样例:3 43 5 4输出样例:2.50样例解释第一根和第

2021-01-28 12:44:28 175

原创 1402. 星空之夜 (DFS+连通块相似判断)AcWing寒假每日一题 提高组(1)

题目链接题目:夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。一个星群不能是一个更大星群的一部分。星群可能是相似的。如果两个星群的形状、包含星星的数目相同,那么无论它们的朝向如何,都认为它们是相似的。通常星群可能有 8 种朝向,如下图所示:现在,我们用一个二维 01 矩阵来表示夜空,如果一个位置上的数字是 1,那么说明这个位置上有一个星星,否则这个位置上的数字应该是 0。给定一个夜空二维矩阵,请你将其中的所有星群用

2021-01-28 12:10:16 254

原创 C++ Spfa判断负环简易模板

#include<bits/stdc++.h>using namespace std;const int N=10010*2;int e[N],ne[N],w[N],h[N],idx,cnt[N],dis[N],st[N];int n,m;queue<int> q;void add(int a,int b,int c){ e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;}bool spfa(){ memset(d

2020-11-12 22:29:56 198

原创 C++ 二分查找模板(普通、左边界、右边界)

//最基本的二分查找算法int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else

2020-10-31 15:46:55 1146

原创 C++ 区间合并模板

相关题目:区间合并#include<bits/stdc++.h>using namespace std;vector<pair<int,int> > temp,ans;int main(){ int n,i=0; cin>>n; while(n--) { int x,y; cin>>x>>y; temp.push_back({x,y});

2020-10-28 20:57:21 477

原创 C++ 树状数组简易模板

#include <iostream>#include <cstdio>using namespace std;const int N = 100010;int a[N], tr[N];int n, m;//lowbit 函数int lowbit(int x){ return x & -x;}//在第x的数上加上vvoid add(int x, int v){ for(int i = x; i <= n; i += lowb

2020-10-26 22:46:14 203

原创 LeetCode周赛第206场 5513. 连接所有点的最小费用

思路:首先思路就是通过最小生成树的思想去将所有点连接起来,这样就能保证我们的得到的是最小费用我们把点存在一个边的结构体中,通过一个二重循环将所有的边保存下来,然后再用sort函数将其从小到大排序接下来就是用并查集依次将不同的边连接起来,然后最终能够将点连在一起,这时得到的就是最小费用。代码用的是kruskal的思想,时间复杂度还是有点高的代码:class Solution {public: struct Edge { int u,v,w; }edge[1.

2020-09-13 15:19:45 217

原创 LeetCode周赛第206场 5512. 统计不开心的朋友

思路:模拟即可,代码写的时候又臭又长代码:class Solution {public: int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) { int ans=0; map<int,int>temp; for(int.

2020-09-13 15:10:00 117

原创 LeetCode周赛第206场 5511. 二进制矩阵中的特殊位置

思路:模拟即可代码:class Solution {public: bool check(int x,int y,vector<vector<int>>& g) { for(int i=0;i<g[0].size();i++) { if(g[x][i]==1&&i!=y) return false; } .

2020-09-13 15:06:43 122

原创 洛谷 P4017 最大食物链计数 (图论——拓扑排序)

思路:记录每一条边输入时的出度和入度。然后遍历每一个点的入度,将入度为零的点存入队列中,同时将入度为零的点相对应的f(食物链数量数组)置为1.然后开始对队列进行BFS,同时更新所到点的食物链数量,最后当一个点的出入度都为0时,将它的食物链数量记录到ans中。代码:#include <iostream>#include<algorithm>#include<queue>using namespace std;int n,m;int G[5005][.

2020-08-18 15:08:53 338

原创 LeetCode 109. 有序链表转换二叉搜索树 (递归)

思路:最简单的做法就是先把链表中的值按序存入一个vector中,然后通过简单的二分来找到子树的根结点,然后用递归把它们都构建成一棵树即可。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition f.

2020-08-18 09:38:05 101

原创 LeetCode 289. 生命游戏 (状态同步)

思路:这道题的主要难点就在于如果你直接根据规则更新原始数组,那么就做不到题目中说的 同步 更新。假设你直接将更新后的细胞状态填入原始数组,那么当前轮次其他细胞状态的更新就会引用到当前轮已更新细胞的状态,但实际上每一轮更新需要依赖上一轮细胞的状态,是不能用这一轮的细胞状态来更新的。当然我们可以额外复制一个数组就可以解决上述的问题,但是如果要想原地直接解决的话,我们也可以使用位运算。原始每个活细胞我们可以看做是ob01,死细胞我们可以看做ob00,所以当活细胞还是活细胞时我们可以把原来的值改为ob11.

2020-08-18 09:23:52 176

原创 LeetCode 第 202 场周赛 1553. 吃掉 N 个橘子的最少天数(简单记忆化搜索)

思路:朴素的DFS或者BFS肯定会超时的,只需要加上一个记录的set来剪枝即可。同时利用BFS层序遍历的特点,输出第一个找到的答案。代码:class Solution {public: int minDays(int n) { int ans=0; unordered_set<int> temp; queue<int> q; q.push(n); temp.insert(n); .

2020-08-18 09:11:14 175

原创 LeetCode 八月打卡day11 130. 被围绕的区域(DFS)

题目链接思路:我们可以先对边界上的’O’进行DFS,将所有’O’先修改为其他字符,这里取了’Y’字符。对四条边搜索完后剩下的’O修改为’X’字符后,我们再将’Y’字符修改为’O’字符,就能得到正确答案。代码:class Solution {public: int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void dfs(int x,int y,vector<vector<char>>& boa

2020-08-11 10:44:56 102

原创 LeetCode 八月打卡day10 696. 计数二进制子串(字符串模拟)

题目链接思路:我们可以将字符串s按照 0 和 1 的连续段分组,“00110011"就可以压缩成"0101”,同时记录每一位的连续的值。然后我们将压缩完的字符串每相邻两位进行对比,将小的数字与答案值相加。代码:class Solution {public: vector<int> cnt; int countBinarySubstrings(string s) { int con=0; int ans=0; if(

2020-08-10 19:51:38 140

原创 LeetCode 八月打卡day9 93. 复原IP地址(DFS)

题目链接思路:简单的DFS,搜索的时候要注意以0开头的数字。代码:class Solution {public: vector<string> ans; bool check(string s) { int sum=0; string temp; for(int i=0;i<s.size();i++) { if(s[i]!='.') {

2020-08-10 19:46:43 111

原创 LeetCode 八月打卡day4 207. 课程表(拓扑排序)

题目链接思路:这题主要考查的就是拓扑排序的思想,我们可以统计每一个点的入度,同时构建起邻接矩阵。先将入度为0的点存入BFS的队列中,入读为0说明该课程不是任何课程的先导课。然后再对队列中的每个点的出度进行遍历,同时每遍历一次就将遍历的点的入度减1,同时将新的入度为0的点存入队列中,同时在遍历的过程中统计一共有多少个点进入过该队列中。当BFS结束时,我们判断一下在遍历的过程中一共有多少个点进入过该队列中,如果所有点都进入过则输出"true",否则输出"false"。代码:class Sol

2020-08-04 15:55:47 161

原创 LeetCode 八月打卡day3 415. 字符串相加(高精度模拟)

题目链接思路:比较简单的模拟题,判断出哪一个字符串为较长字符串,然后再将短字符串和长字符串一位一位的相加,同时记录进位代码:class Solution {public: string addStrings(string num1, string num2) { string a,b; int pos=0; if(num1.size()>=num2.size()) { a=num1;

2020-08-04 15:44:47 146

原创 LeetCode 八月打卡day2 114. 二叉树展开为链表(递归)

题目链接依据二叉树展开为链表的特点,使用后序遍历完成展开。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:

2020-08-04 15:40:23 135

原创 LeetCode 八月打卡day1 632. 最小区间(multimap的应用——键值可重复的存储)

题目链接思路:利用multimap将二维vector中的每个元素以(元素值,组别)的方式存入,由于元素值可能重复,所以这里使用multmap来存储。利用滑动窗口对multimap中的存入的元素从头到尾开始进行线性的遍历,同时用一个map来记录有多少组的元素已经被遍历。当检测到map.size()包含每组时,开始将窗口左端缩小,同时记录过程中左端和右端的最小差值。最后得到的左端和右端值就是答案class Solution {public: vector<int> sma

2020-08-02 17:31:15 181

原创 洛谷P1433 吃奶酪 DFS、模拟退火

1

2020-07-14 14:36:50 181

原创 C++ Dijkstra简易模板

#include<iostream>#include<algorithm>#include<queue>#include<memory.h>using namespace std;struct edge{ int to; int next; int w;}edge[500010];int cnt=0;int head[100010];int d[100010];int vis[100010];int n,m,u,v,w,s;pri

2020-07-12 10:26:27 1176 1

原创 C++ Kruskal简单模板

#include<iostream>#include<algorithm>#include<cstdio>using namespace std;int f[200005];int n;int m;int ans=0;int cnt=0;struct edge{ int u; int v; int w;}Edge[200005];int read(){ int x=0,f=1; char c=getchar(); while(c<

2020-07-06 17:04:58 410

原创 LeetCode 第 29 场双周赛 5434. 删掉一个元素以后全为 1 的最长子数组

题目链接可以用滑动窗口搞的其实,但是模拟也可以class Solution {public: int longestSubarray(vector<int>& nums) { int ans=0; int pos=1; int y=0; int temp=0; int flag=0; int z=1; for(int i=0;i<nums.size(

2020-06-28 14:29:58 154

原创 LeetCode周赛第193场 5441. 保证文件名唯一

这题主要卡在超时上,特别烦,不过最后还是过了class Solution {public: vector<string> getFolderNames(vector<string>& names) { vector<string> ans; map<string ,int> temp; for(int i=0;i<names.size();i++) { ..

2020-06-21 15:26:15 165

原创 C++模拟手机通信录管理系统

一、题目模拟手机通信录管理系统主要功能有:(1)查看功能:选择此功能,列出手机通信录得分类,如A同事、B家人、C朋友、D同学等分类,但选中某分类时,像是出此类所有数据中的姓名和电话号码;(2)增加功能:录入新数据(包括姓名、电话号码、分类),当录入重复的姓名和电话号码时,提示结果错误并取消录入。(3)修改功能:对选择(选择的方式自定)的联系人,修改其通信录的相关信息,但如果修改姓名,不能跟其他已有的联系人的姓名不能重复。(4)删除功能:选择某个联系人的姓名,可对此人的相应数据进行删除。(5)其

2020-06-19 13:26:19 4257 10

原创 C++模拟实现cpu任务调度(FCFS和SJF的实现)

一、题目模拟实现cpu任务调度,要求说明调度算法及实现的数据结构。二、效果图当没有明显长作业出现时,FCFS和SJF的时间区别不大当明显长作业出现时,FCFS和SJF的平均周转和平均带权周转时间相差很大三、分析在这个实验中,我使用到了结构体队列的方法来进行相应的操作,只需要首先先将作业的结构体定义出,同时再将其存入队列中,通过对队列进行不同的排序操作和对队列中符合条件的元素选择,在FCFS中我们可以根据每个作业的到达时间来选择这一次要执行哪一个作业,而在SJF中,我们每次执行完一个作业

2020-06-19 12:57:25 1898 1

原创 C++栈和队列模拟停车场管理系统

一、题目某停车场可以停放n辆汽车,该停车场只有一个大门, 每辆汽车离开停车场都要求之前的汽车必须先退出停车场为它让道,而后让道的汽车再次驶入停车场,停车场示意图如下:要求设计合理的数据组织方式,设计算法实现停车管理系统,实现车辆的进入、离开并根据停车时间计费。二、效果图五辆车进入只能停三辆车的停车场(假设停车场容量为3)查看车场状态同时让一辆车离开 候车场的车进入查看车场状态再让一辆车离开 候车场的车进入查看车场离开的那两辆车的历史停车付费记录三、分析对于这一题来说,我们只要

2020-06-19 12:52:52 3496 2

原创 C++多线程+优先队列模拟打印机任务管理

效果图:当打印任务中出现优先级高的任务则先打印当打印任务的份数超过最大容量时还能记忆已打印份数当打印队列的任务数不超过最大容量时当打印任务还没全部打印完时出现比它优先级更高的任务当打印任务优先级相同时优先打印内容少的#include<stdio.h>#include<iostream>#include<queue>#inclu...

2020-06-17 17:38:55 2125

C++模拟手机通信录.zip

模拟手机通信录管理系统 主要功能有: (1)查看功能:选择此功能,列出手机通信录得分类,如A同事、B家人、C朋友、D同学等分类,但选中某分类时,像是出此类所有数据中的姓名和电话号码; (2)增加功能:录入新数据(包括姓名、电话号码、分类),当录入重复的姓名和电话号码时,提示结果错误并取消录入。 (3)修改功能:对选择(选择的方式自定)的联系人,修改其通信录的相关信息,但如果修改姓名,不能跟其他已有的联系人的姓名不能重复。 (4)删除功能:选择某个联系人的姓名,可对此人的相应数据进行删除。 (5)其他功能:自行分析设计有特色效果的功能,作为加分点。如:排序、分组、个人收藏、最近联系人等。 (6)要求:设计合理的数据结构,实现合理美观的操作界面。

2020-06-29

C++学校人员信息管理系统课程设计.doc

一个用C++写的学校人员管理系统,适合大一大二的课程设计,里面运用到了链表、文件读写等一些C++基本语法操作

2020-04-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除