【CF103D】Time to Raid Cowavans

本文介绍了一道CodeForces平台上的题目D的解题思路与实现代码。该题涉及序列求和问题,在限定时间内通过预处理和离线查询的方式进行高效解答。适用于算法竞赛训练。

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

题目

题目链接:https://codeforces.com/problemset/problem/103/D
给一个序列 aaammm 次询问,每次询问给出 t,kt, kt,k 。求 at+at+k+at+2k+⋯+at+pka_t + a_{t+k}+a_{t+2k}+\cdots+a_{t+pk}at+at+k+at+2k++at+pk 其中 t+pk≤nt+pk \leq nt+pknt+(p+1)k>nt+(p+1)k > nt+(p+1)k>n
n,m≤300000,ai≤109n,m \leq 300000,a_i \leq 10^9n,m300000,ai109

思路

一眼题吧。
考虑一个阈值 ttt,对于 k≤tk\leq tkt 的询问,O(tn)O(tn)O(tn) 预处理出来然后 O(1)O(1)O(1) 回答,对于 k>tk>tk>t 的询问,直接 O(nt)O(\frac{n}{t})O(tn) 回答。
t=n≈350t=\sqrt{n}\approx 350t=n350,时间复杂度为 O(mn)O(m\sqrt{n})O(mn)。把询问离线一下就可以做到空间复杂度 O(n)O(n)O(n)

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=301000,M=550;
int n,m,a[N];
ll sum[N],ans[N];

struct node
{
	int x,y,id;
}b[N];

bool cmp(node x,node y)
{
	return x.y<y.y;
}

int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%d",&m);
	for (int i=1;i<=m;i++)
	{
		scanf("%d%d",&b[i].x,&b[i].y);
		b[i].id=i;
	}
	sort(b+1,b+1+m,cmp);
	for (int i=1;i<=m;i++)
		if (b[i].y<=M)
		{
			if (b[i].y!=b[i-1].y)
				for (int j=n;j>=1;j--)
					sum[j]=sum[j+b[i].y]+a[j];
			ans[b[i].id]=sum[b[i].x];
		}
		else
		{
			for (int j=b[i].x;j<=n;j+=b[i].y)
				ans[b[i].id]+=a[j];
		}
	for (int i=1;i<=m;i++)
		printf("%lld\n",ans[i]);
	return 0;
}
<think>好的,我现在需要帮用户解决关于在Armbian系统中为S905X2芯片和MT7661无线蓝牙模块寻找合适的DTB文件的问题。首先,我需要回忆一下相关知识,并结合提供的引用内容来构建答案。 用户提到他们的设备是中兴云电脑W102D,芯片是S905X2,无线模块是MT7661,内存2GB,存储32GB EMMC。他们想找到对应的DTB文件来导入Armbian系统。根据引用[2],用户可能已经尝试过Armbian,但需要正确的DTB文件来支持硬件。 首先,DTB文件是设备树二进制文件,用于描述硬件配置,让内核知道如何与硬件交互。不同芯片和硬件组合需要不同的DTB。对于晶晨S905X2芯片,Armbian社区通常会有对应的DTB文件,但需要确认是否支持MT7661无线模块。 接下来,我需要考虑S905X2常见的DTB文件名。常见的可能有g12a或g12b系列,因为S905X2属于Amlogic G12A或G12B家族。例如,meson-g12a-u200.dtb或者meson-g12b-odroid-n2.dtb,但具体需要查看Armbian的文档或社区支持。 另外,MT7661的无线模块可能需要特定的驱动支持。Armbian的内核是否已经包含该驱动?如果DTB文件正确,但驱动未加载,可能需要手动配置或编译内核模块。不过用户的问题主要是DTB,所以先解决硬件识别问题。 根据引用[2],用户可能已经通过U盘启动Armbian,但写入EMMC有风险。建议用户先测试不同的DTB文件,找到合适的再考虑安装到EMMC。例如,在uEnv.txt中修改dtb_name参数,尝试不同的g12a或g12b的DTB文件,比如meson-g12a-sei510.dtb或meson-g12a-x96-max.dtb,这些常用于S905X2设备。 还需要注意内存和存储配置是否影响DTB的选择,但通常DTB主要是适配芯片和外围设备,内存信息可能由bootloader传递,所以可能不需要特别调整。不过,不同设备的EMMC控制器可能不同,所以需要对应型号的DTB。 可能用户的中兴W102D没有官方的DTB支持,所以需要尝试接近的型号,比如X96 Max或A95X F3,这些使用S905X2的盒子可能有社区提供的DTB。用户可能需要从Armbian论坛或GitHub仓库下载这些DTB文件,或者从现有的固件包中提取。 另外,引用[1]提到固件路径中的中兴盒子B860固件合集,但W102D属于不同的型号,所以可能需要寻找特定的支持。不过,用户提供的引用中没有直接相关的DTB信息,需要依赖外部资源。 总结步骤应该是:建议用户访问Armbian论坛或GitHub仓库,查找S905X2设备的DTB文件,尝试常见的如meson-g12a开头的文件,测试无线和蓝牙功能是否正常。如果不行,可能需要从其他固件提取或自行编译DTB。同时提醒用户备份当前配置,避免写入EMMC前的风险。</think>### 解决方案 对于基于晶晨S905X2芯片且配备MT7661无线/蓝牙模块的设备(如中兴云电脑W102D),在Armbian系统中适配DTB文件需遵循以下步骤: 1. **确定芯片架构** S905X2属于Amlogic G12A/G12B家族,需选择对应的DTB文件,例如: - `meson-g12a-u200.dtb` - `meson-g12b-odroid-n2.dtb` 这些文件通常位于Armbian镜像的`/boot/dtb/amlogic/`目录中[^2]。 2. **适配MT7661无线模块** MT7661需要内核驱动支持,若默认DTB未包含相关配置,需手动修改设备树: ```dts &sd_emmc_a { wifi@1 { compatible = "mediatek,mt7661"; reg = <1>; }; }; ``` 修改后需重新编译DTB或使用社区已适配的版本。 3. **测试与验证** - 将候选DTB文件重命名为`dtb.img`并替换至U盘启动分区的根目录。 - 修改`uEnv.txt`中的`dtb_name`参数指向新DTB文件。 - 通过U盘启动测试无线、蓝牙及EMMC功能是否正常[^2]。 4. **社区资源参考** - 建议查阅Armbian论坛中关于S905X2的讨论帖,例如针对X96 Max、A95X F3等相似设备的DTB适配案例。 - 可从GitHub仓库(如`ophub/amlogic-s9xxx-armbian`)获取预编译的DTB文件。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值