首页 > TAG信息列表 > memset
又双叒叕写挂啦啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
2022.09.01 数位DP一定要以 -1 作为没有搜到的标志, 不要是0 。原因:设为 \(0\) 时会导致反复搜索整颗搜过的值为 \(0\) 的搜索树,会浪费大量时间。(HDU3709,因为将没有提前 memset 导致 \(TLE\) )prim
朴素prim #include<bits/stdc++.h> using namespace std; const int N = 550, INF = 0x3f3f3f3f; int n, m, dis[N], g[N][N]; bool vis[N]; int prim() { memset(dis, 0x3f, sizeof dis); int res = 0; for(int i = 0; i < n; i ++ ) { inABC265F,G
ABC265F 题解做法 by Mikukuovo #include<bits/stdc++.h> #define ll long long using namespace std; const int mod=998244353; int n,d; int main(){ ios::sync_with_stdio(false); cin>>n>>d; vector<int>p(n),q(n); for(int i=0;i&l2022 HDU多校4
Link with Bracket Sequence II(区间 DP) Problem 有一个长度为\(n\)的括号序列,括号种类有\(m\)种,现在这个括号序列丢失了一些括号,问可能的合法括号序列个数 (和)可以匹配当且仅当它们的种类一样 \(A\)是合法的,\(x,y\)是某种括号,那么\(xAy\)是合法的当且仅当\(x,y\)匹配 \(A、B\)YbtOJ 「图论」第3章 最短路径
例题1.单源最短路径 dij 板子。(w36557658 原版 dij 代码! code #include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define fi first #define se second using namespace std; typedef l8.19总结
啊~,本周的第一个暴零 所罗门王的宝藏 \(solution\) 第一眼的时候完全没有想到是图论,当然暴零不是这个原因 把行和列进行连边,因为行i的旋转次数+列j的旋转次数一定等于\(c_{i,j}\),所以bfs一遍,如果无法同时满足\(a_i+b_j=w_{i,j}\),\(a_{i1}+b_{j1}=w_{i1,j1}\),则不行,否则可以 AC C记忆化搜索——递归写法的动态规划
记忆化搜索 原题链接:https://www.acwing.com/problem/content/903/ 记忆化搜索是动态规划的递归写法,简化代码,运算时间稍长,适用于循环遍历不好写的情况 #include <bits/stdc++.h> using namespace std; const int N = 500; int w[N][N]; int f[N][N] = {1}; int dx[4] = {-1,0,1,[AcWing 1127] 香甜的黄油
选一个起点,到其他点的最短距离之和最小 堆优化 dijkstra (太慢) 复杂度 \(O(n \cdot log(m) \cdot p) = 500 \times log(1450) \times 800 = 1.2 \times 10^7\) 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> PII;memset函数的常规用法
memset函数对数组中的每一个元素的每个字节进行初始化,所以一般的int数组中每个元素有四个字节,所以memset(a,0x3f,sizeof(a))其实是把每个元素置成0x3f3f3f3f 对于一般的int数组,在使用memset进行初始化时,有以下几种常见情况 1.置0 memset(a, 0, sizeof(a)); 2.取最大值 memset(a,hdu 2639 Bone Collector II
题目链接:https://vjudge.net/problem/HDU-2639 题目大意:求一个0-1背包中第k个最优解 思路: 将最优解的个数也作为背包的一维来进行递推,只不过递推的依据需要额外的两个数组来记录在相同体积下的第s次最优解 1 # include<iostream> 2 # include<bits/stdc++.h> 3 usmemset时为什么是0x3f和0x3f3f3f3f??
在一些图论算法中经常可以看到,对数组进行初始化成无穷大时,使用memset函数,常常会看到有0x3f,0x3f3f3f3f的出现, const int INF=0x3f3f3f3f; //或者 int a[5]; memset(a,0x3f,sizeof(a)); 0x3f3f3f3f是最大值吗?有什么含义?这样写是为什么? 首先我们需要回顾一下memset函数的用法:memset() :C&C++做内存初始化的函数
一个例题:求最小生成元 如果一个数x加上x的各位数字的和得到y,就说x是y的生成元。 给出一个n(1<=n<=100000), 求它的最小生成元,无解时输出0。 如:输入 216 输出 198 输入 2005 输出 1979 输入 121 输出 0。 首先从思路上容易想到,我们要找一个数(n)的生成元,这个生成元毫无疑问暑假集训7月19日(距离结训赛27天)
CF补题:B题:只想到相隔偶数就算,但是没想好用什么方法计算,每一个都遍历肯定超啊原来可以和滚动优化一样,只记录上一次的位置#include <bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N],pre[N],ans[N]; signed main() { int t; scanf("%d",&t); whilememset c++运算符“,”
memset: 是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值,这个函数通常为新申请的内存做初始化工作。 memset()函数原型:extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组; c:是赋给buffer的值; count:是buffer的长度。 c的取暑假集训Day3 J(lcm系列问题)
本质上还是lcm问题,我们设f[i][j]为到s串的第i位(第i位必选),t串的第j位,符合条件的个数, ***注意这里第i位是必选的***, 这样状态统计的时候就不会混,最后ans就f[i][m]求个和就行,注意到由于t串是多个字符的,所以在求f[i][1]和f[i][j]的时候还是有点差别的。 1 #include "bi这次应该叫高二上一调
T1 匹配 分析 据说是个kmp的板子,但是我把kmp基本忘光了,所以打的哈希,然后赛后去复习了kmp。。。。 AC 代码 #include <iostream> using namespace std; #define ll long long inline int in(){ int x = 0; bool f = 0; char c = getchar(); while(c > '9' || c矩阵快速幂
一般做矩阵快速幂的时候,是需要“把母矩阵和一个答案矩阵相乘赋值给答案矩阵”这个操作执行 \(n\) 次。这时我们可以使用矩阵快速幂优化这个过程。 传入参数的时候不引用,就不会改变母矩阵本身的值,可以重复利用。 一般为了方便会把矩阵的大小固定下来,如果 \(2\times 2\) 的矩阵乘 \(P5501 [LnOI2019]来者不拒,去者不追 题解
题面 首先进行一个转化:每个询问区间 \([l,r]\) 中一对 \((i,j)\),如果 \(a_i< a_j\) 会造成 \(a_i\) 的贡献。最后再加一个区间和就是答案。 考虑这是一个区间每对数的贡献,并且具有可减性,上莫队二次离线那一套。考虑一个位置 \(x\) 对一个区间 \([l,r]\) 的贡献 \(f(x,[l,r])\),拆成P1073 [NOIP2009 提高组] 最优贸易做题笔记
思路是建一个反图,在原图上从点 \(1\) 开始跑一遍 \(SPFA\),算出点 \(1\) 到点 \(x\) 的最短路径上的价格最小值 \(e_x\);再在反图上从点 \(n\) 开始跑一遍 \(SPFA\),算出点 \(n\) 到点 \(1\) 的最短路径上的价格最大值 \(f_x\),答案为 \(\max(f_x - e_x) (1 \le x \le n)\)。 #includeCF662B Graph Coloring题解--zhengjun
题目传送门 题目大意 给你一张无向图,图中每条边是蓝色或者红色的,让你每次选一个点,就会把与这个点相连的边的颜色反转(红变蓝,蓝变红),求最少步数的方案使得最后所有边的颜色都一样。 思路 好像没有 \(2-sat\) 的题解,那我就来一发。 首先分类讨论:要么都变成红色,要么都变成蓝色。 如果洛谷 P1071潜伏者题解--zhengjun
题面传送门 思路 一看就是一道模拟。 注意一下细节就可以了。 代码 #include<bits/stdc++.h> using namespace std; string a,b,c; int x[26],y[26];//分别从两边映射 int main(){ cin>>a>>b>>c; memset(x,-1,sizeof(x)); memset(y,-1,sizeof(y)); for(int i=0;i<a.length();i303 最短路 Floyd 算法
视频链接: #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=210,M=20010; int n,m,a,b,c; int d[N][N]; void floyd(){ for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j&offer14
class Solution { public: static const int MAXSIZE = 59; // 在类中定义常量必须用static int r[MAXSIZE]; int cuttingRope(int n) { memset(r, 0, sizeof(r)); r[0] = 1; r[1] = 1; for(int i = 2; i <= n; i++){ fo最小生成树
Prim O(mlogm) memset(dis, 80, sizeof(dis)); q.push({ 1,0 }); dis[1] = 0; while (!q.empty()) { int u = q.top().s; q.pop(); if (vis[u])continue; vis[u] = true, ++num, ans += dis[u]; for (int i2021级ACM班&2022年寒假集训《数据结构》专题12--拓扑排序和关键路径
A - 数据结构实验之图论十:判断给定图是否存在合法拓扑序列 题目链接 https://acm.sdut.edu.cn/onlinejudge3/contests/3990/problems/A 判定拓扑序列模板题 1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,flag; 4 int mapp[1010][1010]; 5 int vis[1010];