#include<bits/stdc++.h> // 包含常用的库
using namespace std;
long long s = 0, x = 0; // 声明s和x变量用于计算过程
int n, m, i, u, v, p, j; // 声明相关的变量
int a[1000005]; // 存储商店商品总数的数组
int main()
{
cin >> n >> m; // 输入商店个数n和旅游团个数m
for(i = 0; i < n; i++)
{
cin >> a[i]; // 读入每个商店的商品总数
}
for(i = 0; i < m; i++)
{
cin >> u >> v >> p; // 读入每个旅游团的信息
if(u > v) // 确保u小于等于v
{
s = u;
u = v;
v = s;
}
s = 0; // 初始化s为0
for(j = u; j <= v; j++)
{
x = a[j] % p; // 计算每个商店能够赠送的最大商品数
if(x > s) // 更新s为最大赠送商品数
s = x;
if(s == p - 1) // 如果达到最大可能赠送数,提前结束循环
break;
}
cout << s << endl; // 输出每个旅游团对应的最大赠送商品数
}
return 0;
}
代码思路总结:
- 读入商店个数
n
和旅游团个数m
,然后读入每个商店的商品总数存入数组a
。 - 对于每个旅游团,读入它们要逛的商店区间
u
到v
和旅游团人数p
。 - 确保
u
小于等于v
,如果不是则交换它们。 - 遍历
u
到v
的每个商店,计算每个商店能够给导游赠送的最大商品数(即商店商品总数对p
取模的结果)。 - 在遍历过程中,保持迄今为止找到的最大赠送商品数,如果在某个商店找到了最大可能的赠送数(即
p - 1
),则提前结束遍历。 - 对每个旅游团,输出其对应的最大赠送商品数。