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

#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;
}

代码思路总结:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

handsomezqh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值