SOSdp https://codeforces.ml/contest/383/problem/E https://codeforces.ml/blog/entry/45223 E. Compatible Numbers 题意 给定 a i a_i
题意 给定两个长度为 $n$ 的序列 $a,b$。 对于一个 $1$ 到 $n$ 的排列 $p$,记 $c_i=\gcd(a_i,b_{p_i})$,$\sigma(c)$ 表示序列 $c$ 中所有元素的方差。 求 $$\sum\limits_{p}\sigma(c)$$ 对 $10^9+7$ 取模。 $2\leq n,a_i,b_i\leq 10^6$ 。 题解 方差可以写成以下形式 $$\be
白水一道蓝题,针不戳 考虑 \(DP\),设 \(f_{i, j}\) 表示前 \(i\) 个数中已选 \(j\) 个的分数。 有状态转移方程: \(f_{i, j}=f{i, j-1}+f_{i-1, j-1}*a_j\) 为什么能这么 \(DP\)? 我们知道,当选到 \(i\),选了 \(k-1\) 个数的时候,\(a_i\) 对答案的贡献就是前面 \(k-1\) 选的数的分组成绩
为啥我写的都是模板题题解啊 像这种题就得耐心把式子列出来,写出来也不多。为什么某题解用的普通dsu误导人啊,不用长剖写这题的都是毒瘤。 #include<bits/stdc++.h> using namespace std; #define forg(i,x) for(register int i=fir[x];i;i=nxt[i]) #define uu unsigned #define sca
点此看题面 给定一张\(n\)个点\(m\)条边的有向图,要求从\(1\)号点走到\(n\)号点,如果到达的时间超过\(t\)则需要交\(x\)元的罚款。 每条边有一个通过代价\(c_i\),通过第\(i\)条边的时间为\(j(j\in[1,t])\)的概率为\(p_{i,j}\)。 求最小代价。 \(n\le50,m\le100,t\le2\times10^4\)
点此看题面 给定一张\(n\)个点\(m\)条边的无向图。 \(q\)次询问,每次给出\(a\)个二元组\((x_i,y_i)\),询问至少与其中一个\(x_i\)距离不超过\(y_i\)的点数。 \(n\le10^3,m,q\le10^5,\sum a\le2.1\times10^6\) 前言:威廉是仙人掌啊 \(bitset\)处理询问 显然对于一次询问,我们只要对
点此看题面 给定\(n\)个字符串,\(q\)次询问,每次求\(s_k\)在\(s_{l\sim r}\)中的出现次数总和。 \(\sum|s|\le2\times10^5,q\le5\times10^5\) \(AC\)自动机+树状数组 这种一堆字符串的题目,要么建\(AC\)自动机,要么建广义后缀自动机,其实这题两者都行。 最后我还是选择了\(AC\)自动机
题面传送门 写了一个晚上才写完+调完,AC那一刻感觉神清气爽。 询问某一个串在另一个串内出现了几次想到AC自动机,但是因为强制在线而AC自动机无法动态更新fail树所以考虑SAM 然后发现我们只要动态维护LCT虚子树大小即可。 然而虚子树大小其实挺难维护的,所以可以改成每个点的链加。
点此看题面 给定一张森林,其中有\(n\)棵树,第\(i\)棵树中有\(a_i\)个点。 要求再连上\(n-1\)条边使得整张图成为一棵树,假设一种方案中第\(i\)棵树共连出\(d_i\)条边,则这种方案的价值为\((\prod_{i=1}^nd_i^m)(\sum_{i=1}^nd_i^m)\)。 求所有方案的价值之和。 \(n\le3\times10^4,m\l
题目链接:https://www.acwing.com/problem/content/description/146/ 思路:考虑 固定1为根 有节点a,b a到1的路径之间的异或值和b到1之间的异或值相异或的话 得到的结果就是a到b路径的异或值 画图就可以理解 所以题目可以转换成用dfs求出 根1到所有节点的异或值a[i] 然后求这些a[i
Linux内核概念 per-CPU,cpumask,inicall机制,通知链 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容。 1. Per-cpu 变量 Per-cpu 变量是一项内核特性。从它的名字你就可以理解这项特性的意义了。我们可以创建一个变量,然后每个 CPU 上都会
#include <stdio.h> #include <string.h> typedef unsigned char lu_byte; #define CommonHeader struct GCObject *next; lu_byte tt; lu_byte marked #define CommonHeader1 {struct GCObject *next; lu_byte tt; lu_byte marked}GCObject1 /* Common
P1714 切蛋糕 #include <bits/stdc++.h> #define inf 0x7fffffff //#define ll long long //#define int long long //#define double long double #define eps 1e-8 //#define mod 1e9+7 using namespace std; const int mod=1e5+7; const int M=2147483647; const int N=
点此看题面 给定一个数字串,让你把它划分成若干段,使得每段数字递增(可以有前导\(0\)),且在最后一个数尽可能小的前提下,字典序最大。 数据组数\(\le10^3\),\(|S|\le2\times10^3\) 暴力动态规划 首先大体思路自然是先从前往后\(DP\)一遍求出最后一个数最小的取值,再从后往前\(DP\)一遍求
题意:有\(2n\)个数,要凑\(n\)个坐标出来,使得这些坐标全部落在一个矩形内部,问你最小的矩形面积是多少. 题解:这种题一般都是将横纵坐标分开看,首先,矩形的面积=\((max(x)-min(x))\)*\((max(y)-min(y))\).对坐标排序,根据最值原理,“和一定,差大积小”,所以我们可以固定\(x\)
点此看题面 给定一个长度为\(n\)的序列,要求支持两种操作:将区间内大于\(x\)的数减去\(x\);询问区间中\(x\)的出现次数。 \(n\le10^6,q\le5\times10^5,V\le10^5\) 第二分块 突刺贯穿的第二分块 首先观测这道题极度卡内存,肯定无法对于每个块分别开一个\(O(V)\)的数组。 但是,这道题
点此看题面 给定一个长度为\(n\)的序列和一个整数\(p\)。 要求支持两种操作,区间赋值;询问区间中出现次数至少占\(p\%\)的数,可以输出至多\(\lfloor\frac{100}p\rfloor\)个数,可以包含错解,但必须有正确的解。 \(n\le1.5\times10^5,20\le p\le100\) 前置:一个经典的简单题 一个很简单
\(\text{Problem}:\)Paper Task \(\text{Solution}:\) 合法括号串的性质:左括号个数等于右括号个数;任意一段后缀中,左括号个数小于等于右括号。 将 ( 看作 \(-1\),) 看作 \(1\),那么区间 \([l,r]\) 对应的子串是合法括号串的条件:\(1.\) 区间和为 \(0\);\(2.\) 区间内任意一段后缀和都大
查看cudnn版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 #define CUDNN_MAJOR 7#define CUDNN_MINOR 6#define CUDNN_PATCHLEVEL 0--#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL) #include "driver_ty
点此看题面 有一棵\(n\)个点的树,乱序给出与每个点距离小于等于\(2\)的点集。 求构造一棵合法的树。 \(n\le10^3\) 非叶节点间的连边 两个非叶节点\(x,y\)之间存在边,则对于它们两侧的两点\(i,j\),同时与\(i,j\)距离小于等于\(2\)的点只有\(x,y\)两点。 因此,非叶节点\(x,y\)之间有
学习时间不长,记录的只是学习过程的思路和想法,不能保证正确,代码可以在acwing上AC。 01背包问题: 1.首先是简单的01背包问题 2.先确定状态,f[i][j]表示有第i件物品,时间为j的最大价值。 3.第i件物品取时f[i][j]=f[i-1][j-W[i]]+V[i],第i件物品不取时f[i][j]=f[i-1][j],物品只有取与不
每次向下搜点,\(dfn[i]\)表示搜到第\(i\)点时的编号,\(low[i]\)表示第\(i\)个点能到达的最小的点的编号,我们在搜的时候可以把路径上的点存入到栈中,当\(dfn[i]=low[i]\)时,说明我们已经找完一个强连通子图了,此时就可以把栈中的元素出栈得到一个强连通子图. 代码: #include <
绿色的话主要是自己想出来的,红色的是看了题解的 真就啥都不会。。。 \({\color{red}{「九省联考 2018」一双木棋}}\) 前置知识:\(minmax搜索\): 两方都采取最优策略,问我方的最终结果,轮到我方采取对答案贡献最大的,敌方采取对答案贡献最小的搜索方案 考虑用\(vector\)记录每一列放了多
cc2530按键中断 #include "ioCC2530.h" #define LED1 P1_0 #define LED2 P1_1 #define ON 1 #define OFF 0 void delay(unsigned int time) { unsigned int i; unsigned int j; for(i=0;i<time;i++) for(j=0;j<240;j++) { asm("NOP&qu
opencv获得鼠标点击像素坐标 鼠标操作涉及两个函数,第一个是cvSetMouseCallback,这个函数注册一个回调函数。使用方法如下: cvSetMouseCallback(“TestWin”, TestCallBack, Context); 前两个参数分别是窗口的名字和回调函数,最后一个参数需要稍微解释一下,这个参数会作为参数传递