灯泡

LeetCode:Bulb Switcher

我的未来我决定 提交于 2020-05-04 10:15:26
1、题目名称 Bulb Switcher(灯泡开关) 2、题目地址 https://leetcode.com/problems/bulb-switcher/ 3、题目内容 英文:There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every second bulb. On the third round, you toggle every third bulb (turning on if it's off or turning off if it's on). For the n th round, you only toggle the last bulb. Find how many bulbs are on after n rounds. 中文:现有n个灯泡,默认都是关闭的。第一轮会打开所有的灯泡,第二轮关闭所有偶数次序的灯泡,第三轮翻转所有次序为三的倍数位置的灯泡,直到第n轮拨动最后一个灯泡的开关。试确定第n轮后还有几盏灯是亮的。 4、解题方法1(TLE) 一开始我还是尝试着写了一段用于暴力破解问题的代码,这段代码毫无悬念地会导致TLE(Time Limit Exceeded)。 Java代码如下: /** * 灯泡开关测试 *

LeetCode 5353. 灯泡开关 III

两盒软妹~` 提交于 2020-03-08 18:45:00
5353. 灯泡开关 III 房间中有 n 枚灯泡,编号从 1 到 n,自左向右排成一排。最初,所有的灯都是关着的。 在 k 时刻( k 的取值范围是 0 到 n - 1),我们打开 light[k] 这个灯。 灯的颜色要想 变成蓝色 就必须同时满足下面两个条件: 灯处于打开状态。 排在它之前(左侧)的所有灯也都处于打开状态。 请返回能够让 所有开着的 灯都 变成蓝色 的时刻 数目 。 思路:直接找最大值m和light[i]的关系即可,竞赛的时候居然把过程模拟出来了 大神代码 class Solution { public: int numTimesAllBlue(vector<int>& light) { int m=1,cnt=0; for(int i=0;i<light.size();i++){ m=max(light[i],m); if(m==i+1) cnt++; } return cnt; } }; VS我的代码(模拟过程) class Solution { public: int numTimesAllBlue(vector<int>& light) { int len = light.size(); int res=0; int dp[len+5]; fill(dp, dp+len+1, 0);//初始化全为0,关闭状态 dp[0]=2;//第0栈为蓝色 int

PWM(Pulse Width Modulation)控制

ε祈祈猫儿з 提交于 2020-01-01 18:03:14
PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值).PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆 变电路中的应用,才确定了它在电力电子技术中的重要地位。 1 PWM相关概念 占空比:就是输出的PWM中,高电平保持的时间 与 该PWM的时钟周期的时间 之比 如,一个PWM的频率是1000Hz,那么它的时钟周期就是1ms,就是1000us,如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。 分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)。 频率就是这样的,如16位的PWM,它的分辨率达到了1:65535,要达到这个分辨率,T/C就必须从0计数到65535才能达到,如果计数从0计到80之后又从0开始计到80.......,那么它的分辨率最小就是1:80了,但是,它也快了,也就是说PWM的输出频率高了。 双斜率 / 单斜率 假设一个PWM从0计数到80,之后又从0计数到80....... 这个就是单斜率。 假设一个PWM从0计数到80,之后是从80计数到0.....

loj2009. 「SCOI2015」小凸玩密室

拥有回忆 提交于 2019-12-03 10:43:17
「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 $ A_i $,每条边也有个权值 $ b_i $。 点亮第 $ 1 $ 个灯泡不需要花费,之后每点亮一个新的灯泡 $ V $ 的花费,等于上一个被点亮的灯泡 $ U $ 到这个点 $ V $ 的距离 $ D(u, v) $,乘以这个点的权值 $ A_v $。 在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡。请告诉他们,逃出密室的最少花费是多少。 Sol f[i][j]表示点完以i为根的子树,下一个点他的深度为j的祖先的另一个儿子所需要的最小代价。 g[i][j]表示点完以i为根的子树,下一个点他深度为j的祖先。 转移时分讨他没有孩子,只有一个孩子,有两个孩子三种情况。 这样设计状态是nlogn的 #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define maxn 200005 #define ll long long #define ls (x<<1) #define rs

「SCOI2015」小凸玩密室

走远了吗. 提交于 2019-12-03 05:04:26
题目描述 小凸和小方相约玩密室逃脱,这个密室是一棵有 $n$ 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 $A_i$,每条边也有个权值 $b_i$。 点亮第 $1$ 个灯泡不需要花费,之后每点亮一个新的灯泡 $V$ 的花费,等于上一个被点亮的灯泡 $U$ 到这个点 $V$ 的距离 $D(u, v)$,乘以这个点的权值 $A_v$。 在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡。请告诉他们,逃出密室的最少花费是多少。 数据范围 $1 \leq N \leq 2 \times 10 ^ 5, 1 < A_i, B_i \leq 10 ^ 5$ 题解 考虑暴力, $f_{i,j}$ 表示走完 $i$ 子树,直接走到 $j$ 的最小花费,转移考虑用左右儿子转移。 可以发现我们只需要知道 $j$ 为 $i$ 的祖先或者祖先的另一个儿子的 $f$ 值即可,于是复杂度降至 $nlogn$ 。 注意 $i$ 为叶子或者 $i$ 只有左儿子的情况。 代码 #include <bits/stdc++.h> #define LL long long using namespace std; const int N=2e5+5; int n;LL a[N],b[N],f[N][20],g[N][20

PA2014-Final Zarowki(堆)

匿名 (未验证) 提交于 2019-12-03 00:13:02
题目描述 有 n 个房间和 n 盏灯,你需要在每个房间里放入一盏灯。每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮。 你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售。但由于背包空间有限,你至多只能换 k 个灯泡。 你需要找到一个合理的方案使得每个房间都被完全照亮,并在这个前提下使得总功率尽可能小。 输入格式 从标准输入读入数据。 第一行两个整数 n,k ( 1 \le k \le n \le 5\times 10^5 )。 第二行n个整数 p_i ( 1 \le p_i \le 10^9 ),表示你现有的灯泡的功率。 第三行n个整数 w_i ( 1 \le w_i \le 10^9 ),表示照亮每间房间所需要的最小功率。 输出格式 输出到标准输出。 如果无法照亮每间房间,仅输出 NIE 。 否则输出最小的总功率。 样例1输入 6 2 12 1 7 5 2 10 1 4 11 4 7 5 样例1输出 33 提示 对于样例1,将2和10换成4和4。配对方案为1-1,4-4,4-4,5-5,7-7,11-12。 解题报告 (题意)拥有的灯泡功率必须大于等于需要的,有k次机会换拥有的功率 换的次数少于 需要换的灯泡数 时,输出NIE无解 不能直接贪心扫两遍换,因为原来有的其他灯泡可能 能够解决(看样例 (接第三条)

[bzoj4446] [loj#2009] [Scoi2015] 小凸玩密室

若如初见. 提交于 2019-11-28 10:00:29
Description 小凸和小方相约玩密室逃脱,这个密室是一棵有 \(n\) 个节点的完全二叉树,每个节点有一个灯泡。点亮所有灯泡即可逃出密室。每个灯泡有个权值 \(Ai\) ,每条边也有个权值 \(bi\) 。点亮第 1 个灯泡不需要花费,之后每点亮 1 个新的灯泡 \(V\) 的花费,等于上一个被点亮的灯泡 \(U\) 到这个点 \(V\) 的距离 \(Du,v\) ,乘以这个点的权值 \(Av\) 。在点灯的过程中,要保证任意时刻所有被点亮的灯泡必须连通,在点亮一个灯泡后必须先点亮其子树所有灯泡才能点亮其他灯泡。 请告诉他们,逃出密室的最少花费是多少。 Input 第1行包含1个数 \(n\) ,代表节点的个数 第2行包含 \(n\) 个数,代表每个节点的权值 \(ai\) 。( \(i=1,2,…,n\) ) 第3行包含 \(n-1\) 个数,代表每条边的权值 \(bi\) ,第 \(i\) 号边是由第 \((i+1)/2\) 号点连向第 \(i+1\) 号点的边。( \(i=l,2,...N-1\) ) Output 输出包含1个数,代表最少的花费。 Sample Input 3 5 1 2 2 1 Sample Output 5 HINT 对于 \(100\%\) 的数据, \(1 \leq N \leq 2 \times 10^5\) , \(1<Ai,Bi

[洛谷P3943]:星空(DP+最短路)

帅比萌擦擦* 提交于 2019-11-27 05:33:00
题目背景 命运偷走如果只留下结果, 时间偷走初衷只留下了苦衷。 你来过,然后你走后,只留下星空。 题目描述 逃不掉的那一天还是来了,小$F$看着夜空发呆。 天上空荡荡的,没有一颗星星——大概是因为天上吹不散的乌云吧。 心里吹不散的乌云,就让它在那里吧,反正也没有机会去改变什么了。 小$C$拿来了一长串星型小灯泡,假装是星星,递给小$F$,想让小$F$开心一点。不过,有着强迫症的小$F$发现,这串一共$n$个灯泡的灯泡串上有$k$个灯泡没有被点亮。小$F$决定和小$C$一起把这个灯泡串全部点亮。 不过,也许是因为过于笨拙,小$F$只能将其中连续一段的灯泡状态给翻转——点亮暗灯泡,熄灭亮灯泡。经过摸索,小$F$发现他一共能够翻转$m$种长度的灯泡段中灯泡的状态。 小$C$和小$F$最终花了很长很长很长很长很长很长的时间把所有灯泡给全部点亮了。他们想知道他们是不是蠢了,因此他们找到了你,让你帮忙算算:在最优的情况下,至少需要几次操作才能把整个灯泡串给点亮? 输入格式 从标准输入中读入数据。 输入第$1$行三个正整数$n,k,m$。 输入第$2$行$k$个正整数,第$i$个数表示第$i$个被没点亮的灯泡的位置$a_i$​。 输入第$3$行$m$个正整数,第$i$个数表示第$i$种操作的长度$b_i$​。 输出格式 输出标准输入中。 输出一行一个非负整数,表示最少操作次数。 样例 样例输入