算法
StarryTank
这个作者很懒,什么都没留下…
展开
-
CSP-202212-3-JPEG解码
这题是近几次最简单的大模拟了,唯一难点就是数据的Z字型扫描,懒得找规律可以直接打表,也很快。这种大模拟题问题背景基本不用看,直接从问题描述开始,句子翻译成代码。原创 2023-03-18 16:45:05 · 230 阅读 · 1 评论 -
ccf-csp202203-3资源调度管理器
ccf-csp202203-3资源调度管理器原创 2022-09-27 21:30:25 · 740 阅读 · 0 评论 -
算法设计与分析期末复习题
算法设计与分析期末复习题原创 2022-06-24 00:20:45 · 6960 阅读 · 1 评论 -
CCF-CSP 201712-4 行车路线(100分)
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航。 小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。 例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口之间的距离都是2公里。如果小明从1号路口到5号路口,则总疲劳值为(2+2)2+2+22=16+2+4=22。 现在小芳拿到了地图,请帮助她原创 2021-11-21 19:16:41 · 264 阅读 · 0 评论 -
IPv6压缩(字符串模拟)
#include<bits/stdc++.h>using namespace std;int n;struct node{ int start,end,len;};vector<node>v;bool cmp(node n1,node n2){ if(n1.len!=n2.len) return n1.len>n2.len; else return n1.start<n2.start;}void address(string &s){ v.原创 2021-11-09 17:55:19 · 271 阅读 · 0 评论 -
求第K小的数(分治)
//时间复杂度O(n) #include<bits/stdc++.h>#define N 10000000using namespace std;int n,k,ans,a[N];void search(int l,int r,int k){ if(l>r) return; int x=a[l]; int i=l,j=r; while(i<j){ while(a[j]>=x&&i<j){ j--; } a[i]=a[j原创 2021-10-27 22:07:22 · 1154 阅读 · 0 评论 -
最短路-Floyd算法
#include<bits/stdc++.h>using namespace std;#define N 205#define INF 0x3f3f3f3fint d[N][N],n,m,q;void Floyd(){ for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) {原创 2021-09-21 20:13:52 · 43 阅读 · 0 评论 -
二维差分
二维差分如果扩展到二维,我们需要让二维数组被选中的子矩阵中的每个元素的值加上c,是否也可以达到O(1)的时间复杂度。答案是可以的,考虑二维差分。a数组是b数组的前缀和数组,那么b是a的差分数组原数组: a[i][j]我们去构造差分数组: b[i][j]使得a数组中a[i][j]是b数组左上角(1,1)到右下角(i,j)所包围矩形元素的和。如何构造b数组呢?我们去逆向思考。同一维差分,我们构造二维差分数组目的是为了 让原二维数组a中所选中子矩阵中的每一个元素加上c的操作,可以由O(n*n)的时原创 2021-09-21 10:27:07 · 956 阅读 · 0 评论 -
一维差分
类似于数学中的求导和积分,差分可以看成前缀和的逆运算。差分数组:首先给定一个原数组a:a[1], a[2], a[3], a[n];然后我们构造一个数组b : b[1] ,b[2] , b[3], b[i];使得 a[i] = b[1] + b[2 ]+ b[3] +, + b[i]也就是说,**a数组是b数组的前缀和数组,反过来我们把b数组叫做a数组的差分数组。**换句话说,每一个a[i]都是b数组中从头开始的一段区间和。考虑如何构造差分b数组?最为直接的方法如下:但是我们其实可以不需要原创 2021-09-20 17:57:54 · 63 阅读 · 0 评论 -
最小生成树MST-Prime算法(堆优化)
//给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。//时间复杂度O(mlogn) 适用于稠密图#include<bits/stdc++.h>#define N 1000000using namespace std;int n,m,cnt,vis[N],dist[N],head[N],ans;typedef pair<int,int>PII;struct edge{ int to,next,weight;}e[N];void原创 2021-09-20 14:49:34 · 249 阅读 · 0 评论 -
最小生成树MST-Prim算法(朴素版)
//时间复杂度O(n^2)可解决图中可能存在重边和自环,边权可能为负数#include<bits/stdc++.h>#define N 1000000using namespace std;int n,m,cnt,vis[N],dist[N],head[N],ans;typedef pair<int,int>PII;struct edge{ int to,next,weight;}e[N];void add(int u,int v,int w){原创 2021-09-20 14:27:14 · 83 阅读 · 0 评论 -
STL中set的用法
STL中set的用法set,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。头文件:#include常用的函数:s.inset() 添加一个元素s.begin() 返回set容器的第一个元素的地址s.end() 返回set容器的最后一个元素地址s.clear() 删除set容器中的所有的元素s.empty() 判断set容器是否为空s.max_size() 返回set原创 2021-08-28 21:56:30 · 1380 阅读 · 0 评论 -
Dijkstra标准版(堆优化)
#include<bits/stdc++.h>#define maxn 200005#define inf 0x3f3f3f3fusing namespace std;int n,m,s,cnt,vis[maxn],dis[maxn],head[maxn];;struct edge{ int to,next,weight;}e[maxn];void add(int u,int v,int w){ e[++cnt].to=v; e[cnt].weight=w;原创 2021-07-17 20:28:57 · 61 阅读 · 0 评论 -
Dijkstra弱化版
#include<bits/stdc++.h>#define maxn 1000000#define inf 0x3f3f3f3fusing namespace std;int n,m,s,cnt,vis[maxn],dis[maxn],head[maxn];struct edge{ int to,next,weight;}e[maxn];void add(int u,int v,int w){ e[++cnt].to=v; e[cnt].weight=w;原创 2021-07-16 11:16:55 · 52 阅读 · 0 评论