tmp

AC自动机+高斯消元 hdu 5955 Guessing the Dice Roll 16沈阳icpc

試著忘記壹切 提交于 2020-02-16 09:37:37
在AC自动机上,目标节点建立xi = 1的方程,非目标节点建立xi = 0 的方程,其余节点根据Trie树Fail数组转移,建立 xi = ∑ aj * x[i->j] 然后sz个方程,sz个未知数,解得x0,即为从原始状态(游戏开始)到 第i人胜出的概率。 利用高斯消元解方程x0 代码 #include <bits/stdc++.h> const long long mod = 1e9+7; const double ex = 1e-10; const int maxn = 205; #define inf 0x3f3f3f3f using namespace std; int sgn(double x){ if (x > ex) return 1; if ( x < -ex) return -1; return 0; } struct Trie{ int ch[maxn][10]; int last[maxn]; int val[maxn]; int f[maxn]; double gauss[150][150]; int vis[150]; int now; int sz; Trie() { sz = 1; memset(ch[0],0,sizeof(ch[0])); } void init(){ sz = 1; memset(ch,0,sizeof(ch)); memset

独自空忆成欢 提交于 2020-02-16 09:26:36
1.定义:利用一组地址连续的存储单元依次自栈底到栈顶存放栈的数据元素. (而栈顶是随着插入和删除而变化的,可以用一个整形变量top存放栈顶的指针,数据入栈或出栈时使整形变量 top分别加1或减1。) 2.栈的基本操作: (1)初始化栈 stackvis ,定义一个栈 (2)入栈 vis.push(x) (3)出栈 vis.pop() (4)判断是否为空 vis.empty() (5)判断栈中元素的数量vis.size() (6)得到栈的栈顶元素 vis.top() 综上: #include 用<bits/stdc++.h>则无需考虑头文件. 题目 problem A:栈-程序员输入问题 nefu 1624 # include <iostream> # include <bits/stdc++.h> using namespace std ; int main ( ) { stack < char > s1 ; stack < char > s2 ; char a [ 100 ] ; int i , n ; gets ( a ) ; n = strlen ( a ) ; for ( i = 0 ; i < n ; i ++ ) { if ( a [ i ] == '@' ) { while ( ! s1 . empty ( ) ) s1 . pop ( ) ; continue ;

[noi.ac] #31 最小生成树

你。 提交于 2020-02-15 23:51:45
问题描述 小 \(D\) 最近学习了最小生成树的有关知识。为了更好地学习求最小生成树的流程,他造了一张 \(n\) 个点的带权无向完全图(即任意两个不同的点之间均有且仅有一条无向边的图),并求出了这个图的最小生成树。 为了简单起见,小 \(D\) 造的无向图的边权为 \([1,\frac{n(n-1)}{2}]\) 之间的整数,且任意两条边的边权均不一样。 若干天后,小 \(D\) 突然发现自己不会求最小生成树了。于是他找出了当时求出的最小生成树,但是原图却怎么也找不到了。于是小 \(D\) 想要求出,有多少种可能的原图。但是小 \(D\) 连最小生成树都不会求了,自然也不会这个问题。请你帮帮他。 形式化地,你会得到 \(n-1\) 个递增的正整数 \(a_1,a_2,\cdots,a_{n-1}\) ,依次表示最小生成树上的边的边权。你要求出,有多少张 \(n\) 个点的带权无向完全图,满足: 每条边的边权为 \([1,\frac{n(n-1)}{2}]\) 之间的整数; 任意两条不同的边的边权也不同; 至少存在一种最小生成树,满足树上的边权按照从小到大的顺序排列即为 \(a_1,a_2,\cdots,a_{n-1}\) (事实上,可以证明任意一张无向图的任意两棵最小生成树上的边权集合相同)。 因为答案可能很大,所以你只要求出答案对 \(10^9+7=1,000,000,007\

40、Linux文件误删除恢复操作

放肆的年华 提交于 2020-02-15 21:16:44
rm -rf / #此方法删除不了/目录; rm -rf /* #此方法可以删除/目录下的所有内容,禁止使用; 40.1、前言: 作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记, 并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删 文件后及时补救,还是可以恢复的。 40.2、文件误删除情况一: 当前系统有多用户,其中一个用户对文件进行修改,另一个用户对文件进行删除操作,此时该文件 的进程id还是存在的通过以下命令进行恢复; 1、窗口一: [root@nfs01 ~]# cd /tmp [root@nfs01 tmp]# echo 'test' >test.txt [root@nfs01 tmp]# cat test.txt test [root@nfs01 tmp]# cat >>test.txt 1 2 3 2、窗口二: [root@nfs01 ~]# rm -vf /tmp/test.txt 已删除"/tmp/test.txt" [root@nfs01 ~]# ls /tmp [root@nfs01 ~]# [root@nfs01 ~]# lsof | grep -i "delete" cat 4715 root 1w REG 8,2 7

POJ 3414 Pot (输出路径)【BFS】

混江龙づ霸主 提交于 2020-02-13 14:20:04
< 题目 链接 > 题目大意: 有两个容量的空杯子,能够对这两个空杯子进行三种操作: 分别是fill(a),装满a杯子; drop(a),倒空a杯子; pour(a,b),将a杯子中的水倒入b杯子中; 现在问你,是否能够通过这三种操作,使得这两个杯子中至少有一个杯子中含有c体积的水,如果不行,输出“impossible”,如果可以,输出操作的步数,以及每一步的具体操作。 解题分析: 此题与一道输出路径的很相像,只不过那道题是输出每一次操作对应的点的状态,而此题是要输出具体的操作。不难想到,我们依然可以记录下BFS路径上点的状态,然后根据这个点和上一个点的状态差距推导出它们之间的具体操作。 #include <cstdio> #include <cstring> int v[5],m; const int maxn=100000; int vis[110][110]; int flag; struct node{ int val[5]; int step; int pre; //记录上一个点在que[]数组中的位置 node(int a=0,int b=0,int c=0,int d=-1){ val[1]=a,val[2]=b,step=c,pre=d; } }que[maxn]; void fill(node &now,int a){ now.val[a]=v[a]; }

最小生成树(模板)

匆匆过客 提交于 2020-02-13 14:07:16
51nod1212最小生成树模板题: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1212 克鲁斯卡尔(加边法):先取最小的边,在判断是不是一个集合(不是舍去,是加上) 普里姆(加点法):先已经判断了不是一个集合,再从不是的集合中找出最小的边把点加入,最后更新(再取,再更新。。) 都是加到n-1条边停止(n个点最少由n-1条边连通),另外,Kruskal不用考虑重边(并查集自动取舍),Prim需要考虑重边(不考虑必错!) (关于去最小边,克鲁斯卡尔事先排序好按顺序取即可,所以是n*logn;普里姆每轮之后都要更新,所以每次取都循环找一次,所以是n*n,当然最后还可以优化这里就不说了) 克鲁斯卡尔 以边为重点进行各种操作,点不是重点,所以存图方式不重要很简单。(把边连接信息表示出来就行,结构体完美表示) 另外关于并查集,初学并查集推荐不用深度优化,只改变父节点就行更加好理解,而且时间也差不了多少 初级并查集 1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 #include <iomanip> 5 #include <cstdio> 6 #include <cstring> 7 using namespace std; 8

The North American Invitational Programming Contest 2016 - Tourists ( LCA )

天涯浪子 提交于 2020-02-12 20:30:16
题意 给出一棵n个点,n-1条边的树。现在计算所有标号为x到y的距离之和(满足y>x且y是x的倍数) 思路 关于树上任意两点距离之和,一开始想到树形dp,可树形dp,是对每条边,求所有可能的路径经过此边的次数,是求出边两端的点数,这条边被经过的次数就是两端点数的乘积。 但是该题对计算的距离加了限制(y>x且y是x的倍数),显然不能用树形dp来做了。 接下来想到图论部分的算法,想处理出来两点之间的距离,也就是最短路,但是n=2e5,跑n遍dijkstra或者n遍spfa在复杂度上肯定会T,故不可行。 队友提到LCA(最近公共祖先),随意定义一个根root,用LCA倍增法预处理出来每个点到根的深度数组dep[],然后找两个点的最近公共祖先lca,那么这两点间的距离即 dep[i] + dep[i*j] - dep[lca] * 2 + 1 (根据题意,距离是这两点间边的个数+1) 代码是kuangbin的LCA倍增法板子改了一波。 AC代码 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <cstdlib> #include <iostream> #include <vector> #include <queue> using namespace std; const

2018-2019 ACM-ICPC, Asia Seoul Regional Contest

£可爱£侵袭症+ 提交于 2020-02-12 20:28:44
ProblemA Circuits Solved. 题意: 有$n$个矩形,可以放两条平行与$x$轴的线,求怎么放置两条无线长的平行于$x$轴的线,使得他们与矩形相交个数最多 如果一个矩形同时与两条线相交,只算一次。 思路: 离散化后枚举一根线,另一根线用线段树维护,扫描线思想 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define N 400010 5 int n; 6 int b[N]; 7 int x[N], y[N]; 8 vector <int> in[N], out[N]; 9 int ans[N]; 10 11 namespace SEG 12 { 13 struct node 14 { 15 int Max, lazy; 16 node () {} 17 node (int Max, int lazy) : Max(Max), lazy(lazy) {} 18 void init() { Max = lazy = 0; } 19 void add(int x) 20 { 21 Max += x; 22 lazy += x; 23 } 24 node operator + (const node &other) const 25 { 26 node res; res.init(); 27 res

zabbix自定义监控项、添加图形、设置触发器、远程执行命令

喜你入骨 提交于 2020-02-12 17:34:58
文章转载自:https://www.cnblogs.com/xiami-xm/p/8929163.html 监控项是在zabbix中手机数据的基础,没有监控项就没有数据,系统自带模板带有大量默认item,自定义item可以定义在模板中,在应用模板即可使用对应item;也可直接在host中定义 目标:自定义监控项检查/tmp/aa文件是否存在,并设置触发器,实现邮件报警 其实zabbix自带监控项vfs.file.exists可以检查文件是否存在,本文主要为了说明怎么自定义监控项,所以不使用自带的。 vfs.file.exists[file] 检查文件是否存在。返回 0 - 未找到文件;1 - 常规文件或链接(软/硬)存在 1. 开启自定义用户参数 # vim /usr/local/zabbix/conf/zabbix_agentd.conf UnsafeUserParameters=1 2. 在配置文件中添加UserParameter   #UserParameter的格式:UserParameter=<key>,<shell command><br><br>UserParameter=file.exist[*],ls /tmp/$1 >/dev/null 2>&1;echo $? #0表示存在,>0表不存在<br><br>#带参数UserParameter的格式:<key[*]>

一本通 1774:大逃杀

守給你的承諾、 提交于 2020-02-12 12:37:16
\(\quad\) \(n\) 个点, \(n - 1\) 条边,显然就是一棵树了。题干说“可选择不获取资源”,但由于获取资源不需要时间,那显然必须要获取。 \(\quad\) 发现数据范围比较小,考虑 多维 dp 。设计如下: \(\qquad\) \(\bullet\) 设 \(dp_{i,j,k}\) 表示从 \(i\) 出发,花费 \(k\) 单位时间到达 \(j\) 的最大收益。 \(\qquad\) \(\bullet\) \(dp_{i,j,k} = dp_{i,p,t} + dp_{p,j,k-t}\) \(\quad\) 这样最多要转移 \(2.73 \times 10^{12}\) 次,显然超时。主要原因是状态设计得太过具体、暴力。 \(\qquad\) \(\bullet\) 设 \(f_{i,j}\) 表示花费 \(j\) 单位时间,从 \(i\) 出发,经过 \(i\) 的子树,最终返回 \(i\) 的最大收益; \(g_{i,j}\) 表示花费 \(j\) 单位时间,从 \(i\) 出发,最终到达 \(i\) 的子树的最大收益; \(h_{i,j}\) 表示花费 \(j\) 单位时间,从 \(i\) 的子树中出发,经过 \(i\) ,最终到达 \(i\) 的子树的最大收益。 \(\qquad\) \(\bullet\) 事实上, \(g_{i,j}\)