随笔分类 - 模拟
摘要:题意:有$2k$个队伍进行$2k-1$场比赛,1和2比,3和4比,...,每两两决出胜者进行下一轮,现在给你一长度为$2^k-1$的字符串,每个位置代表按顺序的比赛结果,$0$表示下标小的队伍胜,$1$表示下标大的队伍胜,?表示未知,有$q$个询问,每次修改字符串的一个字符,问最后有多少可能的冠军。
阅读全文
摘要:题意:有$n$个人轮流上电梯,电梯送完一个人需要$1$个时刻.电梯有待机和运行两种状态,待机每时刻消耗$E_2$电量,运行每时刻消耗$E_1$电量,若电梯无人使用经过$k$个时刻后会变为待机状态,从待机状态变成运行状态需要消耗$E_3$电量,你可以自定义$k$的值,求出最后一个人走完后的最小消耗总电
阅读全文
摘要:题意:有$n$个数,选$k$个数使得它们的和最大,选完某个数后,其相邻两个数不能再选. 题解:将所有数放到大根堆里,用双向链表来存顺序关系,对于堆顶的$a_i$来说,我们如果选了它,$a_$和$a_{i+1}$就不能再选,但是$a_+a_{i+1}$可能比$a_i$大,我们先不管,先将$a_i$贡献
阅读全文
摘要:题意:在一维坐标轴上有很多小机器人,它们只能一直向左或者向右每次移动一个单位,在$x=0$和$x=m$处分别设有一道屏障,小机器人达到屏障后立刻掉头反向移动,如果有两个小机器人移动后在同一个单位,那么它们就会相撞爆炸,在移动的过程中相遇并不会爆炸,问你每个小机器人爆炸的时间,如果不会相撞爆炸,输出$
阅读全文
摘要:题意:枚举$[1,m]$,给你$n$个数据,每次数据有三个数$t,x,y$,如果$t=1$,那么最多可以操作$y$次,每次看可以对当前的数+=x,如果$t=2$就是每次*=x,问你最少遍历到第几组数据可以得到$i$,如果得不到就输出$-1$. 题解:我们可以直接遍历$n$组数据,每次反着枚举$m$,
阅读全文
摘要:题意:给你一组不重复的序列$a$,每次可以选择一个数删除它左边或右边的一个数,并将选择的数append到数组$b$中,现在给你数组$b$,问有多少种方案数得到$b$. 题解:我们可以记录$b_i$在$a_i$中的位置,然后枚举$b_i$,取它在$a_i$的位置,然后看$a_$和$a_{i+1}$的情
阅读全文
摘要:题意:给你一组数,每次可以选队首或队尾的数放入栈中,栈中元素必须保持严格单增,问栈中最多能有多少元素,并输出选择情况. 题解:首先考虑队首和队尾元素不相等的情况,如果两个数都大于栈顶元素,那么我们选小的放进去,否则选择比栈顶元素大的放进去,该题重点在于队首和队尾元素相同的情况,由于他们相同,那么我们
阅读全文
摘要:题意:有$n$个队员站成一排,有两个教练分别选人,每次选当前剩余人中的能力值最大的那个以及他两边相邻的$k$个人,问最后每个人所在队伍情况. 题解:优先队列模拟,以及双向链表,先用结构体存入每个人的状态,然后全部push到优先队列中,每次将已经分好队的人弹出,然后找当前能力值最大的人分组,至于两边的
阅读全文
摘要:题意:给你两个字符串$s$和$t$,保证$t$的字典序大于$s$,求他们字典序中间的字符串. 题解:我们假设题目给的不是字符串,而是两个10禁止的正整数,那么输出他们之间的数只要把他两加起来除$2$就行了,那么对于字符串又为何不可呢?我们可以将每个字母看成$26$进制的数,像高精度那样模拟加法运算的
阅读全文
摘要:题意:有一组数,可以选择某个数$a_i$相邻的一个数$a_j$,然后可以让$a_i$加上或者减去$|a_i-a_j|$,问最少操作多少次使得数组中所有数相同. 题解:不难发现,每次操作必然可以使得一个数等于它旁边的任意一个数,所以让数组中的其他数等于出现次数最多的那个数一定是最优的,然后我们就去找与
阅读全文
摘要:题意:有一长度为$n$的数组,求最多的区间和相同的不相交的区间的个数. 题解:我们可以先求一个前缀和,然后第一层循环遍历区间的右端点,第二层循环枚举左端点,用前缀和来$O(1)$求出区间和,$pos$表示当前区间和为$cur$的最右端点,如果我们枚举的左端点$j$比$pos[cur]$所在的最右端点
阅读全文
摘要:题意:有两个字符串,两个字符串中的相同字符可以相互匹配,$?$可以和任意字符匹配,输出最大匹配的字符数量和它们分别两个字符串中的位置. 题解:很容易贪心,我们先遍历第一个字符串,然后在第二个字符串中去找与当前位置相同的字符,这个过程我们可以先将每个字符的位置存下来然后再操作,遍历完后再遍历字符和问号
阅读全文
摘要:题意:给你一个$01$串,需要将所有的$1$给炸掉,每次炸都可以将一整个$1$的联通块炸掉,每炸一次消耗$a$,可以将$0$转化为$1$,消耗$b$,问将所有$1$都炸掉的最小花费. 题解:贪心,如果$1$存在,那么我们至少要炸一次,然后可以枚举统计两个连通块之间的$0$的个数,判断是将这些$0$变
阅读全文
摘要:题意:给你一个长度为奇数$n$的序列.你可以对任意元素加上$k$次$1$,求操作后的中位数最大. 题解:先对序列进行排序,然后对中位数相加,如果中位数和后面的元素相等,就对后面所有和当前中位数相等的元素++,然后再对中位数++,不断往复这个过程就好了,具体看代码. 代码: int n; ll k;
阅读全文
摘要:题意:有一个$2$X$n$的矩阵,你想从$(1,1)\(走到\)(2,n)$,每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作,操作后询问是否能走到终点. 题解:只有当第一层和第二层被堵的点连通时才会到不了终点,比如$(x,y)\(和\){
阅读全文
摘要:题意:有一组数,问子数组和最大不超过$t$的最多元素个数. 题解:用数组模拟队列,不断的往里面放,队列中的元素之和大于$t$,就不断地从队头弹出直到满足条件,维护一个最大值即可. 代码: int n,t; int a[N]; int q[N]; int hh,tt=-1; int main() {
阅读全文
摘要:题意:C和D打牌,每张牌有花色和点数,小D刚开始的分数为$v$,不管输还是赢,只要小D出了牌(花色必须相同),就能得到那张牌点数的分数,若是赢了(点数不小于D的牌),他可以另外加$c$分,输了就要扣$c$分,现在D知道了C的出牌情况,问他最多能拿多少分,并输出出牌情况. 题解:首先,假如他两的牌花色
阅读全文
摘要:题意:给你$n$个数,判断是否能构成一个$n$X$n$的回文矩阵,若可以,输出$YES$和矩阵,否则输出$NO$. 题解:如果这个矩阵的行/列元素是偶数的话,很好办,所有出现的数一定是$4$的倍数,我们直接判断然后模拟输出一下即可.如果是奇数,就要麻烦一点,我们首先用桶存一下所有元素的出现次数,然后
阅读全文
摘要:题意:$f(x,m)$表示$x\ mod\ m$,\(A_{1}=1\),而$A_{n+1}=f(A^{2},M)\(,求\)\sum^A_$. 题解:多算几个,会有一个循环节,直接模拟就好了. 代码: ll n,x,m; ll mp[N]; vector<ll> a; int main() { /
阅读全文
摘要:题意:有一个长度为$n$的序列,你需要对其重新排序,构造一个新数组$c$,$c_=gcd(a_{1},...,a)$并且使得$c$的字典序最小. 题解:直接跑$n$次,每次找一个目前最大的$gcd$出来,并标记位置模拟一下就好了. 代码: int t; int n; int a[N],b[N]; i
阅读全文