平面上n个点,两个人交替决策,用线段连接两个点,但不能跨越其他点或者已经存在的线段.不能做的人算输,问你谁赢. 实际上,跟两个人的决策无关,n个点将平面三角剖分,只需要算出有几条边即可. 凸包上如果有K个点,那么图中那K-1条实边每条贡献一个三角形. 凸包内其他的边,每条贡献2个三角形.除了最中心那一个贡献一个. 假设总的三角形数是X,那么总的线段数就是(X*3+K)/2. 线段数是奇数就先手胜,否则后手胜. #include<cstdio> #include<algorithm>…
题面: Problem I. Increasing or DecreasingInput file: standard inputOutput file: standard outputTime limit: 2 secondsMemory limit: 512 mebibytesWe all like monotonic things, and solved many problems about that like Longest Increasing Subsequence(LIS). H…
题意:F(n)为斐波那契数列的第n项,问你F(F(n)) mod 20160519的值. 发现有循环节,F(26880696)=0,F(26880697)=1,.... 于是两次矩乘快速幂即可. #include<cstdio> #include<vector> using namespace std; typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; mat mul…
题意:一个n个点的完全图,点带权,边权是两端点点权的异或值.问你最小生成树. 一个性质,把所有点按照二进制最高位是否为1划分为2个集合,那么这两个集合间只会有一条边.可以递归处理. 把所有点建成01Trie,发现两个集合就是Trie的每个结点的两个子树.用启发式的思想,在小子树里dfs到叶子结点,取出每个值,然后去大子树里查询即可. O(n(logn)^2). #include<cstdio> #include<algorithm> using namespace std; typ…
给你一个字符串,多次区间询问,问你在该区间内最多能有几个easy重复的子序列. 显然如果只有一次询问,从左到右贪心做即可. 分块,预处理任意两块间的答案,不过要把以e a s y开头的四个答案都处理出来.① 然后再预处理每个点到该点所在块右端点的答案,不过只用考虑e开头的.② 询问的时候,分成三部分,l到r[num[l]]直接得到②部分的答案,中间部分直接得到①的答案,右侧再贪心跑一下就行了. #include<cstdio> #include<cstring> #include&…
2016弱校联盟十一专场10.5 传送门 A. As Easy As Possible 假设固定左端点,那么每次都是贪心的匹配\(easy\)这个单词. 从\(l\)开始匹配的单词,将\(y\)的位置标记成有效位置,用主席树维护. 如果\(s_l\ne e\),那么\(l\)与\(l+1\)的匹配结果一致:否则从\(l\)开始匹配到某个位置\(p\)完成单词匹配,我们从\(p+1\)的有效位置继承过来,然后再将\(p\)标记成有效位置即可. B. Be Friends 在二进制下,从高位开始考虑…
背景: 在家美滋滋的上着网课享受着因为疫情带来的平静,没想到随着微信.钉钉铃声响起打破了我半年以来的平静的生活:通知我们过完劳动节要进行答辩,由于我的答辩项目是由 MyEclipse 这个工具编写的我只好再次拾起了对 MyEclipse 的爱!!! 即将进行论文答辩的我发现 MyEclipse 2016 激活过期 害得我又一次把 MyEclipse 2016 给重新激活.以下方法同样适用于MyEclipse 激活过期或者是安装激活以后只有五天试用时间的同学 破解过程: 破解补丁: 激活 MyEc…
题意:给你一张简单无向图(但可能不连通),再给你一个K,让你求解任意一个问题:K染色或者输出一条K长路径. 直接贪心染色,对一个点染上其相邻的点的颜色集合之中,未出现过的最小的颜色. 如果染成就染成了.如果到某个点,发现染不成,则倒着按照颜色从大到小回去,则一定恰好可以找出一条K长度的路径. #include<cstdio> #include<cstring> using namespace std; int first[1005],next[20005],v[20005],e,c…
Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0Special Judge Problem Description Everyone hates ugly problems. You are given a positive integer. You m…
一开始有n个杯子,每个杯子里有一些豆子,两个人轮流操作,每次只能将一个豆子移动到其所在杯子之前的某个杯子里,不过可以移动到的范围只有一段区间.问你是否先手必胜. 一个杯子里的豆子全都等价的,因为sg函数是异或起来的值,所以一个杯子里如果有偶数个豆子,就没有意义. 用sg(i)表示i杯子中的豆子的sg值,sg(i)就是其所能移动到的那段杯子的区间的sg值的mex(未出现的最小非负整数).可以用线段树去做.是经典问题. 由于每次看似是后缀询问,实则是全局询问,故而主席树完全是多余的. 回顾一下区间m…
有一些草,一开始高度都是0,它们的生长速率不同. 给你一些单增的日期,在这些日期要将>b的草的部分都割掉,问你每次割掉的部分有多少. 将草的生长速率从大到小排序,这样每次割掉的是一个后缀,而且不会影响它们生长速率的递增性. 就是三种操作,一种对一个后缀赋值,一种对整个数组作 + 另一个数组(d(i)-d(i-1))*a,一种求区间和. 可以通过打标记的线段树实现,标记下放通过预处理生长速率数组的前缀和可以实现. 队友的代码: #include <iostream> #include &l…
昨天训练打的Gym,今天写题解. Gym100971B 这个题就是输出的时候有点小问题,其他的都很简单. 总之,emnnn,简单题. 代码: #include<iostream> #include<cstring> #include<cstdio> using namespace std; ; int a[N]; int main(){ int n; while(~scanf("%d",&n)){ ; ;i<=n;i++){ scanf…
题意:两地之间有n条不相交路径,第i条路径由a[i]座桥组成,每座桥有一个损坏概率,让你确定一个对所有桥的检测顺序,使得检测所需的总期望次数最小. 首先,显然检测的时候,是一条路径一条路径地检测,跳跃地检测没有意义.考虑已经排好的某个路径的顺序,相邻的两条路径j和j+1如果满足: (route[j].A+route[j].B)+(route[j+1].A+route[j+1].B)*(1.0-route[j].c)> (route[j].A+route[j].B)*(1.0-route[j+1]…
题意:有n个数,除了空集外,它们会形成2^n-1个子集,给你这些子集的和的结果,让你还原原来的n个数. 假设原数是3 5 16, 那么它们形成3 5 8 16 19 21 24, 那么第一轮取出开头的数(3),然后从当前最大的数(24)中减去它,然后必然会产生一个与其相等的数(21),将其一并删去(这个过程利用单调性,使用两个指针进行单调的从右向左的移动即可),然后将21进入下一轮的末尾……如此,3就是答案里的数. 下一轮变成 5 16 21……如此重复,每次序列长度减半,得到最终答案. 队友的…
思路: 直接二分长度不可行,因为有负数. 考虑枚举坐便删l个数,那如果可以在短时间内求出符合条件的右边最小删的数的个数,这题便可做了. 即:当左边删l个数时,要使sum[n]-sum[l]-fsum[n+1-x] <= s成立,求出最小的x.(sum为前缀和,fsum为后缀和) 思考后可以发现可行的fsum[x]必然要是正数,可能的答案x必然是单调递增的(x从0开始). 所以维护一个大于0的递增的单调栈即可,在里面二分找答案. #include <bits/stdc++.h> using…
Description A string of lowercase letters is calledalphabeticalif deleting zero or more of its letters can result inthealphabet string"abcdefghijklmnopqrstuvwxyz". Given a strings, determine the minimum number of letters to insert anywhere in th…
题意:有n个土豆,每个有体积V(i),你可以将每个土豆等分为不超过K份,问你最大块和最小块比值最小为多少. 直接枚举切法,只有n*K种,然后保证其为最大块,去算其他块的切法,即让其他块切得尽可能大即可.O(n*n*K). #include<cstdio> #include<cstring> using namespace std; int n,K,a[105],ans1=150,ans2=1,x[105],ansx[105]; int main(){ // freopen(&quo…
题意: 给你一个n,问你R(n)对应的字符串长度最小的是啥. dp打个表出来,f(i)表示i值对应的字符串的最小长度,发现f(1)=1,f(2)=2,其他的情况下,若是偶数,则恰好在其外面加一对中括号,然后中间填i/2最优,若是奇数,恰好在i-1前面加个1最优. 于是递归输出答案即可. #include<cstdio> #include<iostream> #include<string> using namespace std; string work(int x){…
这份代码可以作为找割边的模板.割边分割出来的部分是无向图的 边-双连通分量. 平面上2*n+1个点,在同一横坐标上的点之间可以任意两两匹配.同一纵坐标上的点之间也可以.问你对于所有的点i,输出i被移除之后,剩余的点能否完美匹配. 把x坐标当一列点,y坐标当一列点,原本的点当做边,建出来一个二分图. 一个连通块可以完美匹配,当且仅当其中边数为偶数.必须所有连通块的边数都是偶数,整个图才可以完美匹配. 考虑移除一个点,如果它不是割边,那么仅仅会让其所在连通块大小-1.如果其是割边,那么将其所在连通块…
一个矩阵,每个位置有一个非负整数,一个人从左上走到右下,不能走重复的格子,问得到的最大权值. 当长宽不都为偶数时,必然能走遍所有格子,横着从左到右,从右到左(或是竖着走)走完即可. 当长宽都是偶数时,必然只有一个格子走不到,黑白染色后,就是白色格子中的最小值走不到,别的全都可以走得到. 两行两行地走,如果没到不取的那个格子所在的那两行,那就横着从左到右,从右到左:如果到了这两行,就竖着循环走:过了这两行之后,就横着从右到左,从左到右. #include<cstdio> using namesp…
平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形. 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调的,可以用一个pointer做出来,然后可以得出那些同方向的向量的区间(这个代码好像有点问题,可能会退化,最好确定了一个LL之后,对一个方向的不要重复算RR.这里如果也改成二分就比较好,复杂度不会退化).然后通过二分可以得到A使得面积在[A,B]间的有哪些(其实这个因为也是单调的,好像也没必要二分,…
f(n)定义为n的十进制表示下所有位的平方和. 问你方程K*f(n)=n在a<=n<=b中的解的个数. 发现f(n)最大不超过2000,可以直接枚举f(n),然后判断K*f(n)的位的平方和是否恰好为f(n). #include<cstdio> #include<iostream> using namespace std; typedef long long ll; ll K,a,b; int main(){ // freopen("g.in",&q…
给你n,K,问你要选出最少几个长度为2的K进制数,才能让所有的n位K进制数删除n-2个元素后,所剩余的长度为2的子序列至少有一个是你所选定的. 如果n>K,那么根据抽屉原理,对于所有n位K进制数,必然会至少有1个数字出现2次或以上,所以00,11,...,K-1 K-1这样的数对是必选的. 对于其他的情况下,我们需要让他构造不出来n位不含重复数字的K进制数. 于是可以把K个数尽可能平均地分成n-1组,每一组内部让他们选出任意两个数都不合法,于是只能组间互相拼,这样他只能构造出最多n-1位的K进制…
给你一行房间,有的是隐身药水,有的是守卫,有的是金币. 你可以任选起点,向右走,每经过一个药水或金币就拿走,每经过一个守卫必须消耗1个药水,问你最多得几个金币. 药水看成左括号,守卫看成右括号, 就从每个位置贪心地向右走,如果在 r 遇到不匹配,则把下一次的左端点置成r+1,接着走. O(n)即可. 因为如果把左端点放在上次的l和r之间,要么会发生不匹配,要么答案无法比上次走的更优. 队友代码: #include <iostream> #include <cstdio> #incl…
给你一个1~n的排列,让你找出4个下标a b c d,满足 (a+b)%n=(c+d)%n (w(a)+w(b))%n=(w(c)+w(d))%n,并且是非平凡解. 发现对于每个数i,找出两个数和为其的数量大概是O(n),于是可以随机找,压到vector里存下,直到找到一个解为止. #include<cstdio> #include<cstdlib> #include<vector> using namespace std; int n,a[1000010]; vect…
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack,k8s WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣..., 典型WEB框架有Django,flask,Tornado 科学运算.人工智能: 典型库NumPy, SciPy, Matplotlib, Ent…
由于GIL的存在,python一个进程同时只能执行一个线程.因此在python开发时,计算密集型的程序常用多进程,IO密集型的使用多线程 1.多进程创建: #创建方法1:将要执行的方法作为参数传给Process from multiprocessing import Process def f(name): print 'hello',name if __name__ == '__main__': #需要注意的是,多进程只能在main中执行 p = Process(target=f,args=(…
自己研究: jQuery拖拽滑动验证码插件 slideunlock.js 原理:(别人说) 响应时间,拖拽速度,时间,位置,轨迹,重试次数等.这些因素能够构成一个采样结果或者辨识特性. 只获取到滑动时间,滑动的长度. 效果: html页面 <link href="css/slide-unlock.css" rel="stylesheet"> <script type="text/javascript" src="js/…
打印日志 console.log 类型判断 第一种方式var type = Object.prototype.toString.call(list);console.log(type);第二种方式typeof list == 'string'第三种方式 注意有3个等号typeof(list) === 'number' https://www.codewars.com/kata/last/train/javascript function last(list) { console.log(argu…
HTML: <!DOCTYPE html> <html lang="en"> <head> <title>jQuery手机触屏拖动滑块验证跳转插件</title> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE-edge,chrome=1"> <m…