s1

C# == 和 Equals 区别

只愿长相守 提交于 2020-04-05 22:59:23
class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); var s1 = new string("yyy"); var s2 = new string("yyy"); var s3 = new StringBuilder("yyy"); var s4 = new StringBuilder("yyy"); Console.WriteLine("object.ReferenceEquals(s1, s2): " + object.Equals(s1, s2)); Console.WriteLine("object.ReferenceEquals(s3, s4): " + object.Equals(s3, s4)); Console.WriteLine("s1 == s2: " + (s1.GetHashCode() + " " + s2.GetHashCode())); Console.WriteLine("s1 == s2: " + (s1.GetHashCode() + " " + s2.GetHashCode()) + " " + s1.Equals(s2)); Console.WriteLine("s3 == s4: " + (s3.GetHashCode()

BZOJ5006 THUWC2017随机二分图(概率期望+状压dp)

只谈情不闲聊 提交于 2020-04-04 21:13:07
  下称0类为单边,1类为互生边,2类为互斥边。对于一种匹配方案,考虑其出现的概率*2 n 后对答案的贡献,初始为1,如果有互斥边显然变为0,否则每有一对互生边其贡献*2。于是有一个显然的dp,即设f[S1][S2]为左边选取S1右边选取S2对答案的贡献。转移时考虑S1中编号最小的点x与右边的点y匹配。首先将f[S1-(1<<x)][S2-(1<<y)]统计进去。然后若(x,y)是单边,或者虽存在互生互斥关系,但其对应边的左端点还不在S1中或就是x,或右端点还不在S2中或就是y,就不管了;否则若互斥将f[S1-(1<<x)-(1<<x')][S2-(1<<y)-(1<<y')]减掉,若互生将f[S1-(1<<x)-(1<<x')][S2-(1<<y)-(1<<y')]加上,其中(x',y')是(x,y)的对应边。这样大概就是C(30,15)*15的。   但是这只有暴力20分,甚至连空间都开不下。然而满分做法和他是一个复杂度的。 对上面的做法改为记忆化搜索,map存储状态就可以了。多了log也多了80分。不是非常理解意义何在。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<map> using

Python学习:集合

a 夏天 提交于 2020-03-29 07:22:18
集合学习笔记 1.添加 add() 注意:add仅可更新一个值 s={1,2,3,4} s.add(6) print(s) 2.清空集合clear() s={1,2,3,4} s.clear() print(s) 3.拷贝 copy() s={1,2,3,4} s1=s.copy() 4.随机删除 pop() s={1,2,3,4} s.pop() print(s) 5.指定删除 remove() 注意:删除集合中不存在的元素会报keyerror的错 s={1,2,3,4} s.remove('3') print(s) 6.指定删除 discard() 注意:删除集合中不存在的元素不会报错 s={1,2,3,4} s.discard('sbbbb') print(s) 交并差 交 list1=[1,2,3,4,5] list2=[2,3,5,5,6,7,8] set1=set(list1) set2=set(list2) print(set1.intersection(set2)) print(set1&set2) 注意:set1&set2 和set1.intersection(set2)效果一致,求交集 并 print(set1.union(set2)) print(set1|set2) 注意:set1.uniont(set2)效果与set1|set2相同 差 list1=[1

1057. Stack (30)

我只是一个虾纸丫 提交于 2020-03-27 09:03:42
题目连接:https://www.patest.cn/contests/pat-a-practise/1057 题意:在堆栈中增加一个返回中位数的功能。 一开始我就直接将堆栈中的数移到vector中然后进行排序…… 网上看了很多人的答案,根本看不懂,树状数组好难理解啊,等以后再细细理解吧。 参考了http://blog.csdn.net/kakitgogogo/article/details/51926600的解法,高明之处在于省去了将堆栈中元素移动的时间,利用set(默认由小到大排序),在Push的时候进行判断然后分别压入s1,s2(s2大于mid,s1小于等于mid); 然后Pop和Push操作的时候分被调整s1,s2以及mid的值。保证s1的大小等于s2的大小或者等于s2的大小+1,这样,s1中的最后一个值就是mid; 注意删除的时候要删除的对象是指针,否则将会把所有值相同的元素都删去 1 #include<stdio.h> 2 #include<set> 3 #include<string.h> 4 #include<stack> 5 using namespace std; 6 int mid=100005; 7 multiset<int>s1,s2; 8 9 void adjust() 10 { 11 multiset<int>::iterator it; 12 if

字符串移位包含的问题

若如初见. 提交于 2020-03-26 06:40:42
问题: 给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。 解法一:从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m), 总体复杂度为O(n*n*m) 。字符串包含判断,若采用KMP算法,时间复杂度为O(n),这样总体的复杂度为O(n*n)。若字符串的长度n较大,显然效率比较低。其中n为S1的长度,m为S2的长度。 #include<iostream> using namespace std; /* strstr函数说明 包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。 返回值:返回该位置的指针,如找不到,返回空指针。 */ int rotate_conbine(char *src,char *dec) { int len

4.集合

天涯浪子 提交于 2020-03-25 18:41:11
3 月,跳不动了?>>> 集合 定义 集合(set)是一种无序不重复对象类型 集合类似字典,但是只有键,没有值 功能 消除重复元素 将列表中的重复元素消除 实现交、并、差等数学计算 语法 变量 = set(列表/字符串 ) s = set(list) >>> list = [1,2,3,1,2,4] >>> s1 = set(list) >>> s1 set([1, 2, 3, 4]) s = set(str) >>> str = 'hello,world;hi,world' >>> s2 = set(str) >>> s2 set(['e', 'd', 'i', 'h', 'l', 'o', ',', 'r', 'w', ';']) 特征 无序 类似字典,没有序列/索引,不支持切片和索引访问 不重复 每个项在集合中都是唯一的 可变&不可变 可变集合 set( ) 可增加删除元素 不可变集合 frozenset( ) 不可增删 如何操作集合: 操作符 交集 & 功能 获取集合中相同的元素 举例 >>> l1 = [1,2,3,4,5] >>> l2 = [2,3,4,5,6] >>> s1 = set(l1) >>> s1 set([1, 2, 3, 4, 5]) >>> s2 = set(l2) >>> s2 set([2, 3, 4, 5, 6]) >>> s1 & s2

汉明校验码

妖精的绣舞 提交于 2020-03-24 23:54:55
首先放个图,为汉明码中信息位N与校验位K的位数关系: 2^(K-1)>=N+K+1 码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有Hm、Hm-1、Hm-2···H2、H1。 一、 编码规则为: ⑴每个校验位Pi在汉明码中被分到位号2^(i-1)的位置上,其余各位为信息位。 ⑵汉明码的每一位Hi有多个校验位校验,其关系式是 被校验的每一位位号等于校验它的各校验位的位号之和 。 ⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。 二、 校验规则为: ⑴当S5~S1为00000时,表明无错。 ⑵当S5~S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该Si对应的Pi位。 ⑶当S5~S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。 ⑷当S5~S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5~ S1 的4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位

Python集合:set

我是研究僧i 提交于 2020-03-19 17:36:08
集合 集合的描述 set是一个无序不重复的序列,可以用 {} 或者 set() 函数创建集合,它存放不可变类型(如字符串、数字、元组)数据。 注意:创建一个空集合必须使用 set() 方法,因为 {} 是用来生成一个空字典的。 集合的方法 add() 将元素添加到集合中。 s1 = {1,2,3,4,5} s1.add('new_number') print(s1) {1, 2, 3, 4, 5, 'new_number'} update() 可一次更新多个值。 # update(x),将x添加到集合中,且参数可以是列表、元组、字典等 s2 = set(('aaa', 'ccc', 'fff')) # 添加字典只能添加不可变的--键 dict_1 = {'name': 'bb', 'age': 'cc', 'aaa': 11} s2.update(dict_1) print("新集合", s2) 新集合 {'name', 'aaa', 'fff', 'ccc', 'age'} remove() 移除集合中的某个元素。 s3 = set(('aaa', 'ccc', 'fff')) s3.remove('ccc') print(s3) {'aaa', 'fff'} 此外还有一个 discard() 函数也能移除集合中的元素,与 remove() 不同的是

AJAX局部刷新和异步技术

China☆狼群 提交于 2020-03-14 19:54:39
用ajax实现简单的局部刷新技术:求乘法 稍微简单的ajax依赖于jQuery 所以首先要导入jQuery包,在写ajax 代码块 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> 7 <title>首页</title> 8 </head> 9 <body> 10 <h4>这是home页面</h4> 11 <input type="text" id="s1">+ 12 <input type="text" id="s2">= 13 <input type="text" id="s"> 14 <button type="button" id="b1">提交</button> 15 <script src="/static/jquery-3.3.1.min.js"></script> 16 <script src="/static/bootstrap/js/bootstrap.min.js"></script>

十、集合与其内置方法

假装没事ソ 提交于 2020-03-12 19:52:40
一、集合类型 1.作用:也是用来存多个值,但是集合主要用于:去重、关系运算 2.定义:在{}内用逗号分隔开多个元素,多个元素满足以下三个条件 1.集合元素必须为不可变类型 2.集合内元素无序 3.集合内元素没有重复 s={1,2,3,4} #本质 s=set({1,2,3,4}) s={} #默认为空字典 定义空集合 s=set() 3.类型转换 s=set([1,2,3,4]) #转换列表 print(s) #打印结果为 {1, 2, 3, 4} s=set((5,6,7,8]) #转换元组 print(s) #打印结果为 {5, 6, 7,8} s=set({'name':'malin'}) #转换字典 print(s) #打印结果为 {'name'} s=set('malin') #转换字符串 print(s) #打印结果为 {'m','a','l','i','n'} 关系运算 4、内置方法 friends1={'egon','malin','a','b'} #定义两个集合一个用户一的朋友们 friends2={'egon','malin','c','d'} #一个用户二的朋友们 4.1取交集:两者共同的好友(有用 $ 或 .intersection()两种方式) print(friends1 & friends2) #第一种方式 print(friends1