
TimusOJ
文章平均质量分 63
zsyzClb
这个作者很懒,什么都没留下…
展开
-
TimusOJ 2042.Nikita
题意给你一个字符串sss和一个kkk,有mmm次查询,每次查询以后两种,第一种将字符串的一个区间修改成同一个字符,第二种是查询字符串一个区间内长度不超过k的回文串的个数。其中1<=∣s∣,m<=1051<=|s|,m<=10^51<=∣s∣,m<=105,1<=k<=501<=k<=501<=k<=50。Solution做这个题我真的花了很久,我第一次做这个题实在八月份,没有AC,到了11月份我重新想了一下这个题,用一个更加优秀原创 2021-11-05 19:50:44 · 289 阅读 · 0 评论 -
TimusOJ 1577. E-mail
题意:给你两个字符串,定义第三个字符串是同时包括两个字符串的最短字符串,让你求第三个字符串的个数。Solution这道题我被我自己误导了。以前我貌似做过类似的题,不过当时没有做出来,原因是我不知道怎么处理重复的情况。然后这道题我想了很久处理重复的方法,不过貌似都不行,后面发现我是想复杂了。(注:f[i][j]f[i][j]f[i][j]表示的是最小值,a[i][j]a[i][j]a[i][j]表示的是第三个字符串,sum[i][j]sum[i][j]sum[i][j]表示的是个数)后面我仔细想了原创 2021-08-28 15:28:58 · 159 阅读 · 0 评论 -
TimusOJ 1476. Lunar Code
题意:给你n,mn,mn,m,让你求满足对于每一列jjj,满足a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1的iii不超过kkk个的01矩阵的个数。Solution我的思路一开始跑偏了。我把满足a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1a[i][j]=0,a[i][j+1]=1的点设置为111,其他的点我设置为000,然后我尝试以行为状态,但是这样的状态数高达一亿多,还要记录每一行原创 2021-08-26 10:33:40 · 220 阅读 · 0 评论 -
TimusOJ 1395. Pascal vs. C++. Version 1,2
题意:给你n个数,让你找最长的等差数列。Solution想了好久,突然想出了一个非常妙的做法。首先用hash来记录每一个数(下标)。然后暴力枚举等差数列的第一项和第二项,假设两个数分别为x,yx,yx,y,判断如果2∗x−y2*x-y2∗x−y存在,就说明这个等差数列已经被找过,就不用管了,如果没有就暴力跳着找,输出的时候再跳一次就好了。Code#include<bits/stdc++.h>#define ll long long#define gc getchar#defin原创 2021-08-20 16:19:15 · 151 阅读 · 1 评论 -
1223. Chernobyl’ Eagle on a Roof
题意:n层楼,m个蛋(一样),每次实验从指定的楼层往下扔一个蛋,用最少的次数测试出最高的能使蛋摔下去不破裂层数。Solution不得不承认,这一道题的思路很妙。首先,不难想到一个O(n3)O(n^3)O(n3)的暴力:枚举楼层扔蛋,所需的实验次数就是max(s1,s2)+1max(s_1,s_2)+1max(s1,s2)+1,其中,s1s_1s1表示蛋破裂后的实验次数,s2s_2s2表示蛋不破裂的实验次数,然后找一个最小的楼层就可以了。#include<bits/stdc++.h&g原创 2021-08-18 11:48:32 · 135 阅读 · 0 评论 -
1171. Lost in Space
题意:有nnn层4∗44*44∗4的格子,每个格子有一个权值,你要从第111层的起点走到第nnn层的任意一个点,每一从只有一些格子能去到下一层,每个格子不能重复经过,求最大的平均权值。Solution这道题看起来不算难,但做起来会发现挺恶心的,卡空间卡得特别厉害。我花了差不多一个上午的时间AC这一道题。为了节省数组的空间,我们先处理每一层的内部,因为路径的条数十分有限,我们可以直接用暴力来处理。定义f[floor][x1][y1][x2][y2][k]f[floor][x_1][y_1][x_2][原创 2021-08-17 15:23:40 · 136 阅读 · 0 评论 -
2014. Zhenya moves from parents
这其实是一道傻逼题,但是花了我很多的时间去想。我的思路是根据暴力的做法来优化成正确的做法先给出暴力的代码:int ans=0,now=0;for(int i=1;i<=n;i++){ now+=a[i]; if(now<0)ans+=now,now=0;}很容易发现根据这一段代码可一个把数列分成很多个段,然后我的思路就开始出错了,我尝试用各种办法来维护段,但是每一种想法都会超时。后面我仔细想了想,发现如果从整体来看,结果就是一段前缀和,毕竟最后是要把每一段全部加起来。然原创 2021-08-11 14:56:54 · 120 阅读 · 0 评论 -
1560. Elementary Symmetric Functions
这是一道很有意思的题目。首先整体上看过去,有单点修改和区间查询的操作,所以基本可以确定用线段树来做。然后仔细观察一下,可以发现一个非常有意思的性质。我们考虑将两个区间合并,s[0/1][5]s[0/1][5]s[0/1][5]表示两个区间的S函数。如果在每一个区间都选择两个数,那么贡献值就是(∑l1<=x1<y1<=r1a[x1]∗a[y1])∗(∑l2<=x2<y2<=r2a[x2]∗a[y2])=s[0][2]∗s[1][2](\sum_{l_1<=x_原创 2021-08-05 10:19:02 · 182 阅读 · 0 评论