2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)-正式赛
B.Error题目描述:
解题思路:思维。问题可以转换为遍历计算 $max\lceil [(j - i) - (a[j] - a[i])] / 2.0 \rceil$代码展示:
123456789101112131415161718192021222324#include <bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int inf=0x7f7f7f7f;const int maxn=1e6+50;int n, a[55], eps = 0;int main(){ cin>>n; for(int i = 0; i < n; i++){ cin>>a[i]; } for(int i = 0; i < n; i++){ for(int j = i + 1; j < n; j++){ int x ...
最大流模板
1、定义
可行流设f(u,v)表示边(u,v)的当前容量上限
设c(u,v)表示边(u,v)的最大容量上限
如果网络流图中的流量满足
源点S:流出量=流量总量
汇点T:流入量=流量总量
任意边(u,v):0<=f(u,v)<=c(u,v)
则称该流为一个可行流
增广增加一条路径的流量,即减少这条路径的当前流量上限,即f(u,v)的值
增广是我们求解最大流的基础
最大流在所有可行流中流量最大的流
2、模板
EK算法maxFlowEK返回值即为网络中最大值,cap数组中原边的逆边即为每个边的流量。
12345678910111213141516171819202122232425262728293031323334353637383940414243int cap[maxMN][maxMN];int pre[maxMN], flow[maxMN];void maxFlowInit(){ memset(cap,0,sizeof(cap)); memset(flow,0,sizeof(flow));}int maxFlowEKBFS(int ...
MySQL 用法记录
数据库创建数据库1CREATE DATABASE 数据库名;
删除数据库1DROP DATABASE School_database;
选择数据库1USE 数据库名;
数据类型数值类型
类型
大小
用途
TINYINT
1 Bytes
小整数
SMALLINT
2 Bytes
小整数
INT
4 Bytes
大整数
FLOAT
4 Bytes
单精度浮点数
DOUBLE
8 Bytes
双精度浮点数
日期时间类型
类型
大小
格式
用途
DATE
3 Bytes
YYYY-MM-DD
日期值
TIME
3 Bytes
HH:MM:SS
时间值或持续时间
YEAR
1 Bytes
YYYY
年份值
DATETIME
8 Bytes
YYYY-MM-DD HH:MM:SS
混合日期和时间值
TIMESTAMP
4 Bytes
YYYYMMDD HHMMSS
混合日期和时间值,时间戳
字符串类型
类型
大小
用途
CHAR
0-255 Bytes
定长字符串
VARCHAR
0-65535 Bytes
变长字符串 ...
C#部分用法整理
1、输出12345Console.WriteLine("输出"); //控制台输出Console.WriteLine(格式字符串(含替代标记),替换值0,替换值1,替换值2,...);Console.WriteLine("两个整数示例是 {0} 和 {1}",3,6);//输出结果为:两个整数示例是 3 和 6
2、计时12345DateTime beforeDT = System.DateTime.Now; //获取开始时间程序段DateTime afterDT = System.DateTime.Now; //获取结束时间TimeSpan ts = afterDT.Subtract(beforeDT); //结束时间减去开始时间Console.WriteLine("DateTime costed for Shuffle function is: {0}ms", ts.TotalMilliseconds); //控制台输出时间
3、多线程3.1 创建并启 ...
【Leetcode】第213场周赛
A.能否连接形成数组解题思路:暴力。从第一位开始枚举,如果piece[i] 可以满足,则加上piece[i] 的长度继续枚举。代码展示:
12345678910111213141516171819202122232425262728293031323334class Solution {public: vector<int> arr,vis; vector<vector<int>> pieces; int n,m; bool tmp; bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) { this->arr = arr; this->pieces = pieces; n = arr.size(); tmp = false; m = pieces.size(); vis.resi ...
浅谈单调栈
1、什么是单调栈?
顾名思义,单调栈就是栈内元素具有单调性。分为单调递增栈和单调递减栈。
单调递增栈就是从栈底到栈顶是从大到小。
单调递减栈就是从栈底到栈顶是从小到大。
即递增递减根据出栈顺序确定,而不是在栈中数据的顺序。
2、单调栈的适用问题
通过使用单调栈,可以找到从左/右遍历第一个比它小/大的元素的位置。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时我们通常使用单调栈。
3、单调栈的算法流程
(单调递增栈)遍历数组,维护一个栈,对于当前元素的数值如果小于栈顶元素的数值,则将其压入栈顶;否则就一直弹出栈顶,直到栈空或者当前元素的数值小于栈顶元素的数值。
实例 : nums = [7,3,4,9,1,0,8,6,2]
枚举第一个元素7。此时栈空,入栈。栈内元素:7。
枚举第二个元素3。此时栈顶元素7 > 3,则入栈。栈内元素:7,3。
枚举第三个元素4。此时栈顶元素3 < 4,则栈顶元素出栈。此时栈顶元素7 > 4,则入栈。栈内元素:7,4。
枚举第四个元素9。此时栈顶元素4 < 9,则栈顶元素出栈。此时栈顶元素7 < ...
【Leetcode】第210场周赛
A.括号的最大嵌套深度解题思路:模拟。代码展示:
123456789101112131415class Solution {public: int maxDepth(string s) { int n = s.size(),ans = 0,t = 0; for(int i = 0;i < n;i++){ if(s[i] == '('){ t++; ans = max(ans,t); }else if(s[i] == ')'){ t--; } } return ans; }};
B.最大网络秩解题思路:用邻接矩阵记录两个城市是否有道路,并记录每个城市相连的道路条数。暴力枚举城市对,算出这个城市对的答案为两个城市相连道路 ...
【Leetcode】第207场周赛
A.重新排列单词间的空格解题思路:模拟。统计空格数以及单词数。代码展示:
1234567891011121314151617181920212223242526272829303132333435363738394041424344class Solution {public: string reorderSpaces(string text) { int k = 0, n = text.size(), i; string t = ""; vector<string> word; for(i=0;i<n;i++){ if(text[i]==' ') k++; else{ t += text[i]; break; } } for(++i;i<n;i ...
LCCUP力扣杯2020秋季编程大赛(个人赛)
A.速算机器人解题思路:模拟。代码展示:
1234567891011121314class Solution {public: int calculate(string s) { int x =1,y=0; for(int i=0;i<s.size();i++){ if(s[i]=='A'){ x = 2*x+y; }else{ y = 2*y+x; } } return x+y; }};
B.早餐组合解题思路:二分。对drinks进行从小到大排序,遍历staple数组中每个元素,二分查找余额 x - staple[i] 的位置,即找出有多少drink可以与之搭配。代码展示:
123456789101112131415typedef long long ll;con ...
【Leetcode】第206场周赛
A.二进制矩阵中的特殊位置解题思路:预处理所有行列和,遍历所有元素,如果该元素为1,并且行列和都为1,则满足要求。代码展示:
12345678910111213141516171819202122232425class Solution {public: int rows[105],cols[105]; int numSpecial(vector<vector<int>>& mat) { int n = mat.size(); if(!n) return 0; int m = mat[0].size(); memset(rows,0,sizeof(rows)); memset(cols,0,sizeof(cols)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ rows[i] += mat[i][j]; ...