23/6/25 算法每日一题
题目:AcWing 4738.快乐子数组我们将 F(B,L,R) 定义为整数数组 B 的索引从 L 到 R(包括两者)的子数组的各个元素之和。
更具体的说,F(B,L,R)=BL+BL+1+…+BR。
如果一个长度为 K 的整数数组 C 满足其所有前缀和均为非负整数,则称数组 C 为快乐数组。
更具体的说,如果 F(C,1,1),F(C,1,2),…,F(C,1,K) 均为非负整数,则数组 C 为快乐数组。
给定一个包含 N 个整数的数组 A,请你计算数组 A 中的所有快乐连续子数组的元素和相加的结果。
大佬代码1234567891011121314151617181920212223242526272829303132333435363738394041//菜,自己润不出来#include <bits/stdc++.h>using namespace std;const int N = 4e5 + 10;long long p[N], pp[N], r[N];//设p数组的前缀和数组为pp, pp[i]=p[1]+p[2]+…+p[i]//定义r[l]为, 以al开始的最 ...
23/6/24 算法每日一题
题目:AcWing 4741.魔法百合井森林里有一口很深的魔法井,井中有 L 朵百合花。
你带着一个大空篮子和足够多的硬币来到了井边。这个井有魔力,向里面投入硬币可以发生神奇的事情:
如果你向井里一次性投入 1 个硬币,井就会发动魔法,将一朵百合花扔进你的篮子里。如果你向井里一次性投入 4 个硬币,井就会发动魔法,统计并记录到目前为止,已经扔进你的篮子里的百合花的数量。如果你向井里一次性投入 2 个硬币,井就会发动魔法,将等同于上次记录数量的百合花扔进你的篮子里。有一点需要特别注意,如果你向井里一次性投入 1 个或 2 个硬币后,井中已经没有足够的百合花扔给你了,那么井就不会发动任何魔法,也不会扔给你任何百合花(钱白花了)。
请你计算,为了将所有百合花都收入篮中,所需要花费的最少硬币数量。
自己尝试的错误做法可以发现这样选不出最优的开始倍增的位置,原理我也不清楚,反正模拟下案例发现这样暴力模拟确实做不出来123456789101112131415161718192021222324252627282930313233343536373839404142#define _CRT_SECU ...
23/6/21 算法每日一题
题目1:AcWing 4742.电某城市有 N 个电力节点,编号 1∼N。
这些电力节点形成的电力网络,可以看作一个 N 个节点 N−1 条边的连通图。
每个电力节点都有一个固定的电容,其中第 i 个节点的电容为 Ai。
现在,可以选择其中一个节点进行供电,其它节点也可以根据实际连接以及具体电容情况接收电力。
具体来说,如果第 i 个节点通电,那么它也可以将电力传输给其它所有与它直接连接且电容严格小于 Ai 的节点。
我们希望通过合理选择初始供电节点,从而使得尽可能多的节点能够通电。
请你计算并输出可以通电的最大节点数量。
手搓邻接表 原文链接h数组:表示每个顶点对应的链表的头节点的下标。
e数组:表示每个边的终点。
ne数组:表示与当前边起点相同的下一条边的下标。
需要注意的是,这些数组内存储的都是下标
具体来说,对于一条边(a, b),我们将它插入到顶点a的链表中。我们需要先将新边的终点存入e数组中,将当前顶点a的链表的头节点下标存入ne数组中,然后将当前边的下标存入h数组中。同时,为了保证新插入的边在链表的头部,我们需要将当前边的下标作为新的头节点,将它存入h数组中,并更新ne数 ...
23/6/22 算法每日一题
题目:AcWing 4440.照相
迫切希望在郡县集市上赢得最佳奶牛摄影师的农夫约翰正在尝试为他的N头奶牛拍摄一张完美的照片。
农夫约翰拥有两种品种的奶牛:更赛牛(Guernsey)和荷斯坦牛(Holstein)。
为了使他的照片尽可能地艺术,他想把他的奶牛排成一排,使得尽可能多的更赛牛处于队列中的偶数位置(队列中的第一个位置是奇数位置,下一个是偶数位置,以此类推)。
由于他与他的奶牛缺乏有效的沟通,他可以达到目的的唯一方法是让他的奶牛的偶数长的「前缀」进行反转(一个前缀指的是对于某个位置 j,从第一头奶牛到第 j 头奶牛范围内的所有奶牛)。
请计算农夫约翰达到目的所需要的最小反转次数。
1234567891011121314151617181920212223242526272829303132//ACW4440 take cow photo#include<iostream>using namespace std;const int N=2*1e5+10;// 由于牛的总数为偶数,且每次翻转的牛的数量总取前偶数个// 对于每次输入,对其进行两两一组的分组// 对于组别G ...
23/6/21 算法每日一题
题目:AcWing 4908.饥饿的牛
贝茜是一头饥饿的牛。每天晚上,如果牛棚中还有干草的话,贝茜都会吃掉其中的一捆。
初始时,牛棚中没有干草。
为了让贝茜不被饿死,农夫约翰制定了N个给贝茜送干草的计划。
其中第 i个计划是在第 di天的白天给贝茜送去 bi捆干草。
这些计划互不冲突,保证 1≤d1<d2<…<dN≤T。
请你计算,贝茜在第 1∼T天中有多少天有干草吃。
12345678910111213141516171819202122232425262728293031323334//ACW4908 hunger cow#include<iostream>using namespace std;int main(){ long long n,t;//送n次草,共t天 long long di,bi,cao=0,last=0;//当前送草日,当前送草量,上次更新的库存草料数,上次送草日 long long fullDay=0;//吃饱天数 cin>>n>>t; while( ...
(项目)23年大二下硬件课设
verilog代码实现模拟交通灯题目要求如下模拟交通灯输入信号:时钟信号clk输出信号:东西向红黄绿灯信号r1、y1、g1以及南北向红黄绿灯信号r2、y2、g2设计要求:1、输出高电平表示相应灯点亮,低电平表示相应灯熄灭。2、初始时东西向绿灯,g1输出高电平,南北向红灯,r2输出高电平。3、12个时钟脉冲(可统一使用时钟脉冲的上升沿或者下降沿,下同)后,原绿灯方向变为黄灯,再3个时钟脉冲后,黄灯方向变红灯,同时原红灯方向变绿灯;随后又是12个时钟脉冲后,当前绿灯方向又变为黄灯,再过3个时钟脉冲后,黄灯方向变红灯,同时当前红灯方向又变为绿灯,如此循环往复。4、绿灯变为黄灯前,绿灯必须先闪烁数次以作为提示,即第8个时钟脉冲到来后绿灯暂时熄灭,第9个时钟脉冲到来后绿灯重新点亮,第10个时钟脉冲到来后绿灯又熄灭,第11个时钟脉冲到来后绿灯又点亮,直到第12个时钟脉冲到来后绿灯才变为黄灯,此功能必须实现。5、设法消除输出信号中的干扰脉冲(“毛刺”),此功能必须实现。
分析在这个模拟交通灯系统中,我们需要根据输入信号:时钟信号clk输出东西向红黄绿灯信号r1、y1、g1以及南北向红黄绿灯信号r2、 ...