摘要:
题意:给定一个序列,求给定区间的第 k 小的值。 析:就是一个主席树的裸板。 代码如下: 阅读全文
摘要:
题意:儿子身无分文出去玩,只带了一张他爸的信用卡,当他自己现金不足的时候就会用信用卡支付,然后儿子还会挣钱,挣到的钱都是现金, 也就是说他如果有现金就会先花现金,但是有了现金他不会还信用卡的钱。他每花一次钱和挣一次钱都会给他爸发一条短信,告诉他挣/花的钱和时间, 但是给出的短信顺序时间可能不是按顺序 阅读全文
摘要:
题意:给定两堆石子,每个人可以从任意一堆拿任意个,也可以从两堆中拿相同的数量,问谁赢。 析:直接运用威佐夫博弈,floor(abs(a, b) * (sqrt(5)+1)/2) == min(a, b) 是必败态。用java的BigDecimal,是很好用的,要十分求Sqrt(5). 代码如下: 阅读全文
摘要:
题意:给定a和b,求一组满足x+y=a && lcm(x, y)=b。 析:x+y = a, lcm(x, y) = b,=>x + y = a, x * y = b * k,其中 k = gcd(x, y)。 然后第一个式子同时除以k,第二个式子同时除以k*k,那么x/k,和y/k是互质的,那么a 阅读全文
摘要:
题意:众所周知,字符 'a' 的ASCII码为97.现在,找出给定数组中出现了多少次 'a' 。注意,此处的数字为计算机中的32位整数。这表示, 1个数字由四个字符组成(一个字符由8位二进制数组成)。 析:直接用运用位运算即可。 代码如下: 阅读全文
摘要:
题意:给定n个人的两两比赛,每个人要么是good 要么是bad,现在问你能不能唯一确定并且是合理的。 析:其实就是一个二分图染色,如果产生矛盾了就是不能,否则就是可以的。 代码如下: 阅读全文
摘要:
题意:在一个半圆内,有2*n个点,其中有大写字母和小写字母。其中你需要连接大写字母到小写字母,其中需要保证这些连接的线段之间没有相交。 如果能够实现,将大写字母对应的小写字母的序号按序输出。 析:我把它看成一个括号序列,然后用栈解决即可。 代码如下: 阅读全文
摘要:
题意:给定两个队伍的每个人的得分,让你安排怎么比赛才能使得观众知道冠军的时间最长。 析:贪心,很简单,就是先开始总分高的先出最差劲的,总分低的先出最厉害的,这个题当时实在是读的不明白啊,WA了好多次。 代码如下: 阅读全文
摘要:
题意:给出n长度的数列,其实1的连续个数不超过a,2的连续个数不超过b。 析:dp[i][j][k] 表示前 i 个数,以 j 结尾,并且连续了k个长度,要用滚动数组,要不然MLE。 代码如下: 阅读全文
摘要:
题意:要求输入一篇N个字符的文章,对所有非负整数i:每到第i+0.1秒时可以输入一个文章字符,每到第i+0.9秒时有P的概率崩溃(回到开头或者上一个存盘点) 每到第i秒有一次机会可以选择按下X个键存盘,或者不存,打印完整篇文章之后必须存盘一次才算完成输入多组N,P,X选择最佳策略使得输入完整篇文章时 阅读全文
摘要:
题意:略。 析:答案就是32^n。 代码如下: 阅读全文
摘要:
题意:进行K次染色,每次染色会随机选取一个以(x1,y1),(x2,y2)为一组对角的子矩阵进行染色,求K次染色后染色面积的期望值(四舍五入)。 析:我们可以先求出每个格子的期望,然后再加起来即可。我们可以把格子进行划分,然后再求概率。 代码如下: 阅读全文
摘要:
题意:给定一棵树,要求从根结点1走k次,每次都是到叶子结点结束,把走过的所有的结点权值加起来,最大是多少。 析:先把每个结点到根结点的路径之和求出来,然后按权值从大到小排序,然后每次把路径中的权值求出来,最后求前k个值的和即可。 代码如下: 阅读全文
摘要:
题意:将一列数字排序 排序规则是 每次找到最小值的位置loc 将1~loc所有数字颠倒 然后删掉第一位 直到排好序 排序要求是稳定的。 析:直接用splay来维护最小值,然后插入删除即可。 代码如下: 阅读全文
摘要:
1500: [NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目。第2行包含N个数字,描述初始时的数列。以下M行,每行一条命令,格式参见问题描述中的表格。任何时刻数列中最多含有50 阅读全文
摘要:
题意:给定上一n*m的矩阵,然后的t个p*q的小矩阵,问你匹配不上的有多少个。 析:可以直接用哈希,也可以用AC自动机解决。 代码如下: 阅读全文
摘要:
题意:给出nn(1≤n≤50,1≤n≤50) 个病毒DNA序列,长度均不超过20。现在给出一个长度不超过1000的字符串,求至少要更换多少个字符, 才能使这个字符串不包含这些DNA序列。 析:利用前缀来做好状态转移。 代码如下: 阅读全文
摘要:
题意:给定一棵树,然后有一些操作,有两种,一种是改变某条边的权值,第二种是询问从u->v的路径中,边权最大的是多少。 析:就一个树链剖分,然后用线段树维护即可。 代码如下: 阅读全文
摘要:
题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C的权值 析:就是简单的树链剖分,可以用树状数组来维护,然后就OK了。 代码如下: 阅读全文
摘要:
题意:有一个由1到k组成的序列,最小是1 2 … k,最大是 k k-1 … 1,给出n的计算方式,n = s0 * (k - 1)! + s1 * (k - 2)! +… + sk-1 * 0!, 给出s1…sk,输出序列里第n大的序列。 析:我们先看第一数,如果第一个数是2,那么它前面至少有(k 阅读全文