2240. 餐饮 分析 网络流经典优化。 拆点 网络流中拆点,特指将点拆开为入点与出点,以此来限制经过点的流量 网络流建图 将点拆为入点与出点 从入点向出点连接一条容量为限制的边 本题,就非常简单了,直接将牛拆点。 AC_code #include<bits/stdc++.h> using namespace std; const int
链接:https://ac.nowcoder.com/acm/contest/24213/1008来源:牛客网 题目描述 如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对
#include<iostream>using namespace std; /* * * * * * * * * * ** * * * ** * * * * * * * * * * * * * **/ void starup(int n) { for (int i = 1; i <= n; i++) { for (int j = 0; j < n - i; j++) cout << "
#include<iostream>using namespace std; /* type *p p = new type[num] ... delete []p */ /* 分配100个整数空间,将1到100存储在这100个连续的空间里*/int main() { int *p; p = new int[100]; for (int i = 0; i < 100; i++
Tourists 题目链接:luogu CF487E 题目大意 给你一个无向图,然后点有点权。 然后每次可能会单点修改点权,或者询问两个点之间所有的路径中点权最小的点。 思路 看到这种所有路径不难想到圆方树。 然后我们考虑方点就是它连着的原点的最小值。 然后会发现如果有修改会每次被卡到 \(O(n)
strcpy()模仿 int main(){ char arr1[20] = "xxxxx"; char arr2[] = "hello" my_strcpy(arr1,arr2); //1,目标地址 2,源地址 printf("打印arr1的结果是:%s",arr1); //结果是:hello return 0; } 模仿代码如下: void my_strcpy(char* dest,char* sr
比赛链接: https://codeforces.com/contest/1698 C. 3SUM Closure 题意: 给定一个序列 \(a\),判断对于任意一个 \(1 <= i < j < k <= n\),是否存在一个 \(1 <= l <= n\),使得 \(a[i] + a[j] + a[k] = a[l]\)。 思路: 首先如果有三个正数及以上的正数,那么选择其中最大的三个,它们的和肯定
基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine),排序器每次只能看到一个列。它是基于元素值的每个位上的字符来排序的。对于数字而言就是分别基于个位,十位,百位或千位等等数字来排序。 基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整
【Day2】一名菜鸟ACMer的暑假训练 (只有半天的训练) CF构造题1200 B. Sorted Adjacent Differences https://codeforces.com/problemset/problem/1339/B 题意: 构造一个满足 这一条件的序列。 解法: 先sort,然后一左一右取(这样就保证了绝对值是递减的),最后把序列翻转过来即可 Code: #incl
KMP kmp算法分为两部分 1.拿原串和模式串匹配(用i表示) 2.给模式串求p数组(模式串指针用j表示) 最难理解的因该是求模式串的p数组,这个数组的含义是当i+1位和j+1位无法匹配时,第i位最大还可以匹配的j位模式串 求法b站的那个留学生讲的比较清楚网址留下 KMP字符串匹配算法2哔哩哔哩bilibi
#include<stdio.h> #include<ctype.h> #include<string.h> #define SZIE 5 void ToUpper(char * st); int PunctCount(char * st); void ToLower(char * st); int main(){ char string[SZIE + 1]; fgets(string, SZIE + 1, stdin); char * f
圆桌问题 分析 二分图多重最大匹配 与二分图最大匹配的最大不同为: 二分图最大匹配中,左右两个点都只能被用一次,而在多重匹配中,左右的点都可以多次被用 网络流建图 从源点向左边点连一条容量为\(L_i\)的边 从所有右边的点向汇点连一条容量为\(R_i\)的边 将中间的所有连接,从左边点向
P2756 飞行员配对方案问题 分析 经典模型,二分图求最大匹配 用匈牙利时间复杂度为\(O(n^3)\),用网络流\(O(m\sqrt{n})\) 直接说 网络流建图 从源点向左边点连一条容量为1的边 从所有右边的点向汇点连一条容量为1的边 将中间的所有连接,从左边点向右边点连接一条容量为1的边 确定方
1. 主从简介 在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患。 想几个问题: 用一台数据库存放数据,若此数据库服务器宕机了导致数据丢失怎么办? 业务量大了,数据多了,访问的人多了,一台数据库无法保证服务质量了怎么办? 1.1 主从作
1、矩阵的相关操作以及矩阵快速转置算法的实现(加减乘并未实现) #include<stdio.h> #include<memory.h> #include<stdlib.h> #include<assert.h> #define ElemType int #define MAXSIZE 100 //三元组定义 typedef struct Triple { int i; int j; ElemType e; }Tripl
#include <stdio.h> int main() { for(int a = 1; a < 10; a++) for(int b = 1; b < 10; b++) for(int c = 1; c < 10; c++) { if (a*a*a + b*b*b + c*c*c == a*100+b*10+c) { printf("%d%d%d\n", a,b,
[LC2300] class Solution { public: using LL = long long; vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long long success) { //sort(spells.begin(), spells.end()); sort(potions.begin(
链接:https://ac.nowcoder.com/acm/contest/23156/1024来源:牛客网 题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示。当他使用某种装备时,他只能使用该装备的某一个属性。并且每种装
数组和循环 int[] a = new int[10];//创建一个数组 元素10个 a[0] = 1; a[1] = 1; int i = 0; for (i = 2; i < 10; i++)//for循环,先循环后判断 { a[i] = a[i - 1] + a[i - 2]; } i = 0; while (i < 10)//while循环,先判断后循环 { Console.WriteLine(a[i++]); } foreach
【kuangbin专题】01——简单搜索 https://www.acwing.com/activity/content/90/ 目录: 1. 棋盘问题 普通dfs问题,注意回溯。 dfs问题就是每种方案都try一下,一直莽到头,然后再挨个回头(回溯) #include <bits/stdc++.h> using namespace std; typedef long long ll; int n, k; ll cnt,
滑动窗口 567.字符串中的排列 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").示例 2: 输入:s1=
目录最小表示法 最小表示法 题意 : 给你一个字符串 a , 找出字符串 a 的的循环同构串中字典序最小的一个 循环同构串 : 把字符串 a 从任意一个地方切开,将两部分交换位置,重新首尾相连形成的串 算法 : 定义指针 i , j , 匹配长度 k 初始 i=0,j=1,k=0 比较 a[i+k] 和 a[j+k] 若 a[i+
package com.tang.struct;public class TestDemo { public static void main(String[] args) { //打印三角形 5行 for (int i = 1; i < 5; i++) { for (int j = 5;j>=i ; j--){ System.out.print(" "); }
题目大意 给一个排列,删除\(m\)个元素,每删一个前,输出逆序对个数。 \(\text{Solution}\) 一道较为简单的\(CDQ\)分治,考虑每删一个数,后逆序对数个数的变化,即上次的\(ans\)减删除数前比他大的,后比他小的。 那么我们可以静态的求这个数,给每一个数加一个消失时间\(T_i\),当\(T_i > T_j\)
冒泡排序 冒泡排序最为出名的排序算法之一,共八大排序 代码相当简单:两层循环,外层冒泡层数,里层对数组依次比较和交换 时间复杂度O(n2) 常考算法:重点 冒泡法:两层循环:外层冒泡轮数,里层依次比较 如果数组中第一个数比第二个数大,我们就交换他们的位置 每次比较都有一个最大,或