10180. 「一本通 5.5 练习 1」烽火传递-单调队列

本文分享了一次使用单调队列优化动态规划(DP)算法的经历。通过对比两种实现方式,探讨了代码规范的重要性,尤其是在函数返回值类型的选择上。文章详细展示了如何利用单调队列来减少DP状态转移的时间复杂度,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一定要注意代码规范,函数没有返回值就VOID

写了个单调队列,本机各种修改,都是对的,交上去就TLE,RE.刷了两页提交记录后,重于发现原来函数想写返回值,就用了int,后来不打算返回值了,也没有修改。

dp[i]=ai+min(dp[j]) i-j<k;

评测总是不过,所以用两种方法写的

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=2e5+10;
struct node {
	int id;
	ll x;
} q[N];
ll a[N],sum[N],dp[N];
ll n,k,head=1,tail=0,ans=2e9;
void inq(int i) { //队首最小值,单调增
	
	while(head<=tail&&q[head].id+k<=i)head++;
	while(head<=tail&&q[tail].x>=dp[i-1])tail--;
	q[++tail].x=dp[i-1],q[tail].id=i;
	dp[i]=q[head].x+a[i];
	if(n-i<k)ans=min(ans,dp[i]);
}
int main() {
	//dp[i]=ai+min(dp[j)):j+k<=i;
	scanf("%lld%lld",&n,&k);
	for(int i=1; i<=n; i++) {
		scanf("%lld",&a[i]);
	}
	memset(dp,63,sizeof(dp));
	dp[0]=0;
	for(int i=1; i<=n; i++) {
		inq(i);
	}
	cout<<ans<<endl;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
struct node {
	int id,x;
} ;
deque<node>q;
int a[N],dp[N];
int n,k,head=1,tail=1,ans=2e9;
void inq(int i) { //队首最小值,单调增	
	while(q.size()&&q.front().id<i-k)q.pop_front();	
	while(q.size()&&q.back().x>dp[i-1])q.pop_back();
	q.push_back({i-1,dp[i-1]});
	dp[i]=q.front().x+a[i];
}
int main() {
	//dp[i]=ai+min(dp[j)):j+k<=i;
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++) {
		scanf("%d",&a[i]);
	}
	for(int i=1; i<=n; i++) {
		inq(i);
	}
	inq(n+1);
	cout<<q.front().x<<endl;
	
}

 

<think>好的,用户现在给了一个具体的SVG代码片段,问怎么修改颜色。之前他们问的是如何修改和风天气图标的颜色,我给出了三种方法:CSS滤镜、内联SVG和直接修改源文件。现在用户提供的代码里有一个内联的SVG元素,看起来他们可能已经尝试了内联的方法,或者想直接在这个代码上改颜色。 首先,我需要看一下用户提供的代码。原来的img标签指向的是外部SVG文件,但现在用户又贴了一个内联的SVG代码。这可能意味着用户尝试将SVG内联到HTML中,以便更容易修改颜色。不过用户可能在转换过程中遇到了问题,或者想确认如何正确修改颜色。 用户的问题是如何修改这个内联SVG的颜色。我需要检查这个SVG的结构。注意到SVG标签中有fill="currentColor",这是一个好的开始,因为currentColor会继承父元素的颜色,所以只要在CSS中设置color属性,就可以改变整个SVG的颜色。此外,里面的path元素有没有内联的fill属性?如果SVG内部元素已经定义了fill属性,比如具体的颜色值,那么currentColor可能不会生效,需要覆盖这些fill属性。 现在看用户提供的SVG代码,path元素没有内联的fill属性,所以fill属性是从SVG标签继承的currentColor。这样,用户只需要在CSS中设置color属性就可以改变颜色。例如,给SVG元素添加一个类名,然后在CSS中设置color。或者直接过id或者现有的类名来设置。 用户可能没有意识到currentColor的作用,或者他们尝试了但没有成功。需要解释如何利用currentColor,或者如果存在内联fill的情况该如何处理。比如,如果path元素有fill="#xxx",就需要用CSS覆盖它,使用!important或者内联样式。 在这个例子中,SVG的类名是qi-100,所以用户可以过这个类名来设置颜色。或者,如果用户想单独控制某个路径的颜色,可以给path元素添加类名,然后分别设置fill属性。不过在这个例子中,所有路径都没有单独的fill属性,所以直接设置父级SVG的color应该有效。 另外,用户之前的问题是关于外部SVG的,现在换成内联的,可能需要确认他们是否正确地将SVG内联,并移除了可能存在的内联fill属性。在这个例子中,用户提供的SVG代码确实使用了currentColor,所以是正确的做法。 总结一下,用户需要知道如何过CSS修改内联SVG的颜色。需要指出currentColor的作用,并提供具体的CSS代码示例,比如设置svg元素的color属性,或者过类名、ID来定位。同时提醒如果SVG内部元素有固定fill值,需要用CSS覆盖,并可能需要使用!important。此外,用户可能需要了解如何动态改变颜色,比如过JavaScript或者不同的类名切换。 最后,检查用户提供的代码是否有其他问题,比如是否有其他内联fill属性需要处理,或者是否有嵌套的结构影响颜色继承。根据用户提供的代码,看起来没有问题,所以主要解决方案就是过CSS设置color。</think>要修改内联SVG图标的颜色,可过以下步骤实现: --- ### 一、原理分析 该SVG代码中已包含关键属性 `fill="currentColor"`,表示颜色继承自父级元素的文本颜色。因此可过以下方式控制颜色: --- ### 二、具体修改方法 #### 1. 过CSS继承颜色(推荐) ```html <style> /* 方案一:过类名控制 */ .qi-100 { color: #ff0000; /* 任意颜色 */ } /* 方案二:过ID控制 */ #weatherIcon svg { color: #00ff00; } </style> ``` * 修改效果:整个SVG图标的填充色会跟随color属性值变化 --- #### 2. 覆盖特定路径颜色 如果需单独控制某个路径: ```html <svg ...> <path class="my-custom-path" ... /> <!-- 添加自定义类名 --> </svg> <style> .my-custom-path { fill: #0000ff !important; /* 强制覆盖原有颜色 */ } </style> ``` --- ### 三、关键代码解读 原SVG代码中的关键配置: ```svg <svg ... fill="currentColor" <!-- 关键属性:启用颜色继承 --> class="qi-100"> <!-- 可控制的选择器锚点 --> <path ... /> <!-- 未定义fill属性,自动继承currentColor --> </svg> ``` --- ### 四、注意事项 1. **优先级问题**:若SVG内部路径有硬编码的`fill`属性(如`fill="#666"`),需在CSS中使用`!important`覆盖 2. **动态控制**:可过JavaScript实时修改颜色: ```javascript document.querySelector('.qi-100').style.color = '#ff8800' ``` 3. **尺寸同步**:外层`<img>`标签的width/height需与内联SVG保持一致(示例中img为100x100,内联svg为16x16,建议统一) --- ### 五、修改示例 ```html <!-- 修改后的完整代码 --> <div style="color: #ff5722;"> <!-- 过父容器控制 --> <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill="currentColor" class="qi-100" viewBox="0 0 16 16"> <!-- 保持原有path不变 --> </svg> </div> ``` 过上述方法,可实现颜色自由控制且保持SVG矢量特性。建议优先使用CSS继承方案,兼容性最佳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值