洛谷P6141 贪心的导游(c++)

洛谷P6141 贪心的导游(c++)_第1张图片

#include // 包含常用的库
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;
}

代码思路总结:

  1. 读入商店个数n和旅游团个数m,然后读入每个商店的商品总数存入数组a
  2. 对于每个旅游团,读入它们要逛的商店区间uv和旅游团人数p
  3. 确保u小于等于v,如果不是则交换它们。
  4. 遍历uv的每个商店,计算每个商店能够给导游赠送的最大商品数(即商店商品总数对p取模的结果)。
  5. 在遍历过程中,保持迄今为止找到的最大赠送商品数,如果在某个商店找到了最大可能的赠送数(即p - 1),则提前结束遍历。
  6. 对每个旅游团,输出其对应的最大赠送商品数。

你可能感兴趣的:(c++,算法,开发语言)