last

[NOI2015]程序自动分析

╄→尐↘猪︶ㄣ 提交于 2019-11-27 13:17:25
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x4≠x1,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。 现在给出一些约束满足问题,请分别对它们进行判定。 输入格式 从文件prog.in中读入数据。 输入文件的第1行包含1个正整数t,表示需要判定的问题个数。注意这些问题之间是相互独立的。 对于每个问题,包含若干行: 第1行包含1个正整数n,表示该问题中需要被满足的约束条件个数。接下来n行,每行包括3个整数i,j,e,描述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1,则该约束条件为xi=xj;若�e=0,则该约束条件为xi≠xj; 输出格式 输出到文件 prog.out 中。 输出文件包括t行。 输出文件的第 k行输出一个字符串“ YES” 或者“ NO”(不包含引号,字母全部大写),“ YES” 表示输入中的第k个问题判定为可以被满足,“ NO” 表示不可被满足。 输入输出样例 输入 #1 复制 2 2 1 2 1 1 2 0

Oracle基本入门

不羁岁月 提交于 2019-11-27 12:40:47
一、数据的存储 1.java 程序中的对象 : 数组、集合保存。当运行的程序结束的时候,里面的数据就消亡。 2. 文件存储系统: 存在的缺陷: 2.1 )没有明确的数据类型划分。 2.2 )没有用户身份验证机制 不安全。 2.3 )不利于维护。 二、数据库概述 1. 概念: 数据库是将数据以某种特定的结构组织、管理存储的系统。 2. 数据库分类: 2.1) 关系型数据库 -- 关系型数据库:是将数据,以一张二维表的形式进行存储,表与表之间存在这交叉引用关系。 -- 基本的名词: 1 ) table( 表 ) :是数据库中保存数据的基本单元。也称之为实体集 entitySet. 2 ) Row( 行 ) :代表具体某一条数据 也称之为 entity( 实体 ). 3 ) Column( 列 ) :代表当前列 存储数据的特点。 4 )主键( primary key ):唯一标识表中的一条数据,不能为 null ; 5) 外键:( foreign key ) : 代表的是本表记录与其他表之间的关系,可以为 null. -- 管理形式 : 基于用户的形式管理,在访问数据库中的数据之前,需要验证身份。 -- 常见的关系型数据库: Oracle | 甲骨文 DB2 | IBM SqlServer | Microsoft 微软 MySql | 甲骨文 — 开源,从 SUN 公司手中收购。 2.2

通俗易懂的理解list工作原理

半城伤御伤魂 提交于 2019-11-27 12:40:40
package com.zf.test.linken; /** * @program: test * @description: 测试链表的结构 * @author: liuzongfang * @create: 2019-08-15 09:14 **/ public class LinkenList { //头结点指针 private Node head; //尾结点指针 private Node last; //链表的实际长度 private int size; /** * 链表插入元素 * @param data 插入元素 * @param index 插入位置 */ public void insert(int data,int index) throws Exception{ if(index<0 || index >size){ throw new IndexOutOfBoundsException("超出链表结点范围"); } Node insertedNode = new Node(data); if(size == 0){ //空链表 head = insertedNode; last = insertedNode; }else if (index == 0){ //插入头部 insertedNode.next = head; head =

[数据结构]后缀自动机

偶尔善良 提交于 2019-11-27 12:33:44
前言 对于字符串 \(s\) , \(|s|\) 表示s的长度 对于字符集 \(A\) , \(|A|\) 表示 \(A\) 的大小 本文字符串下标一律从0开始 。 本文字数较多,如有错别字或者概念性错误,请联系博主或在下方回复。 SAM 后缀自动机 (suffix automaton, SAM) 是一种解决多种字符串问题的数据结构。 SAM基于一个字符串构建的,是给定字符串的所有子串的压缩形式。 标准定义为: 字符串 \(s\) 的SAM是一个接受 \(s\) 的所有后缀的最小 \(\texttt{DFA}\) (确定性有限自动机或确定性有限状态自动机) 构造SAM 我们记 \(t_0\) 为字符串的一个虚拟源点,事实上这种操作(构造虚拟节点)应用非常广泛。 那么SAM应当是: 有向无环图,节点为状态,边叫做转移 所有节点都可以由 \(t_0\) 到达 每个转移代表一个字母,且任意一个状态的出边的字母不同 存在一个或多个 终止状态 ,使得从 $t_0 $ 到终止状态上的所有转移依访问顺序排列,对应原字符串 \(s\) 的某个后缀,且 \(s\) 的任何后缀均可以上述方式描述。 SAM是满足以上的条件节点数最小的自动机 简单来说,没有后缀链接的SAM是一棵以 \(t_0\) 为源点的无向图。这个图的名字叫做后缀链接树。 没有后缀链接的SAM的样子 目前您暂且不需要知道后缀链接是什么

CSS的选择器

徘徊边缘 提交于 2019-11-27 12:02:10
1.基础的选择器 选择器 含义 示例 * 通用元素选择器,匹配任何元素 * { margin:0; padding:0; } E 标签选择器,匹配所有使用E标签的元素 p { font-size:2em; } .info和E.info class选择器,匹配所有class属性中包含info的元素 .info { background:#ff0; } p.info { background:#ff0; } #info和E#info id选择器,匹配所有id属性等于footer的元素 #info { background:#ff0; } p#info { background:#ff0; } 2.组合选择器 选择器 含义 示例 E,F 多元素选择器,同时匹配所有E元素或F元素,E和F之间用逗号分隔 Div,p { color:#f00; } E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 #nav li { display:inline; } li a { font-weight:bold; } E > F 子元素选择器,匹配所有E元素的子元素F div > strong { color:#f00; } E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F p + p { color:#f00; } 3.CSS 2.1 属性选择器 选择器 含义

STL vector push_back详解

三世轮回 提交于 2019-11-27 11:28:04
vector的push_back操作是将一个元素插入vector的末尾。 源码如下: template <class T, class Alloc = alloc> void YVector::push_back(const T& x) { if (finish != end_of_storage) { construct(finish, x); ++finish; } else { insert_aux(finish, x); } } 函数insert_aux template <class T, class Alloc = alloc> void YVector::insert_aux(iterator position, const T& x) { if (finish != end_of_storage) { construct(finish, *(finish - 1)); ++finish; T copy_x = x; copy_backward(position, finish - 2, finish - 1); *position = copy_x; } else { const size_type old_size = size(); const size_type new_size = old_size == 0 ? 1 : 2 * old_size;

HDU 4812 (点分治)

廉价感情. 提交于 2019-11-27 10:25:15
题目: https://vjudge.net/contest/307753#problem/E 题意: 给你一颗树,树上每个点都有个权值,现在问你是否存在 一条路径的乘积 mod 1e6+3 等于 k的路径,如果有找到字典序最小的方案 思路, 树上路径~点分治 我们能知道每条路径的值,现在我们可以转化的问题是,怎么找一条路径等于K,和两条路径的乘积等于K, 首先第一种很明显就是判断相不相等即可,第二种的话,我们知道所有路径,我们怎么找到O(n)找到两个呢,我们用个数组存下所有是否出现过,然后,其实就是一个简单的小学问题,我们枚举每个距离的时候相当于 x,y,z已经知道 x,z了,式子是x*y=z,我们就只要判断z/x是否在标记数组中出现过即可,又因为这个有mod ,所以我们只能去乘z的逆元,这个时间卡的有点紧,我加了输入挂,和预处理逆元,map标记都不能用,只能用普通标记数组。 然后还有一个问题,你是否能和之前那样直接求出来所有的距离,答案是否定的,因为你直接去遍历数组标记,数组中的路径还含有两个都是同一子树的情况,这种时候是不能加入标记数组的,但是怎么避免呢,这里用到一个巧妙地方法,我们直接在计算所有路径到重心的距离的时候去更新答案,因为我们只有得到一个子树所有答案的时候才会存入标记数组,这样就避免一个子树的路径发生冲突的情况。最后我们再清空掉我们当前重心存入的答案。

关于分布式服务限流的一些思考

一世执手 提交于 2019-11-27 10:09:25
限流必然是很有价值的,在系统资源不足时面对外部世界的不确定性(突发流量,超预期的用户)而形成的一种自我保护机制。 但是价值感是很低的,因为99.99%的时候系统总是工作在安全线之下,甚至一年到头都碰不到一次撞线的机会。这就好比法律,它始终存在,但是大部分时候对于大多数人它几乎不存在,或者说感知不到它的存在。 一、限流的作用 由于API接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机。 限流(Rate limiting)指对应用服务的请求进行限制,例如某一接口的请求限制为100个每秒,对超过限制的请求则进行快速失败或丢弃。 限流可以应对: 热点业务带来的突发请求; 调用方bug导致的突发请求; 恶意攻击请求。 因此,对于公开的接口最好采取限流措施。 二、为什么要分布式限流 当应用为单点应用时,只要应用进行了限流,那么应用所依赖的各种服务也都得到了保护。 但线上业务出于各种原因考虑,多是分布式系统,单节点的限流仅能保护自身节点,但无法保护应用依赖的各种服务,并且在进行节点扩容、缩容时也无法准确控制整个服务的请求限制。 而如果实现了分布式限流,那么就可以方便地控制整个服务集群的请求限制,且由于整个集群的请求数量得到了限制,因此服务依赖的各种资源也得到了限流的保护。 三、限流的算法

mysql关于自动编号问题 转载

女生的网名这么多〃 提交于 2019-11-27 08:56:17
MySql数据库唯一编号字段(自动编号字段) 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的 AUTO_INCREMENT属性来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据列自增属性。 ISAM表 如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。 把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。 当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。 当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果插入的值与已有的编号重复,则会出现出错信 息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个 新值开始递增。也就是说,可以跳过一些编号。 如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。 如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。 如果用replace命令基于AUTO

顺序表上的基本操作实现

感情迁移 提交于 2019-11-27 08:36:17
在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算 #include <iostream> #include <cstdlib> using namespace std; template<typename T> class SeqList { private: T* data; int maxSize; int last; void Resize(int newSize) { T *newAry; if(newSize<=0) { cerr<<"无效的数组大小"<<endl; return; } if(newSize!=maxSize) { newAry=new T[newSize]; if(newAry==NULL) { cerr<<"存储分配错误"<<endl; exit(1); } int n=last+1; T* srcptr=data; T* desptr=newAry; while(n--) { *desptr++=*srcptr++; } delete [] data; data=newAry; maxSize=newSize; } } public: SeqList(int sz=0) { maxSize=sz; last=sz-1; data=new T[maxSize]; } SeqList(SeqList<T> &L) {