瞪皱炕 发表于 2026-2-11 01:15:00

tracker 2026.02.07相邻的糖果 贪心+双指针

相邻的糖果
这个题其实就是一个贪心题,求任何m个相邻的盒子内糖果的数目不能超过x个。
那么我们可以想,如果这个盒子里面的糖果的数目和超过了x个,那肯定是要把超出的部分都减掉。
而前面的盒子又会跟后面的盒子又组成新的一组。所以减掉后面的糖果会让下一组的总数减少,所以我们肯定是优先减掉靠后的糖果。
我在这里实现的时候就是说如果sum>x,就相应的减掉sum-x个。因为如果本身不大于x个,而加入新的糖果之后,整体大于x,那么新进来的盒子肯定是够减的。
这里用双指针维护,如果不够m个,那就是右指针右移。当算完了这一组m个之后,左指针右移,这样下一次循环的时候就会判断为不够m个右指针继续右移。
纯享版
#includeusing namespace std;#define int long long const int N = 1e6+100;int a;int n,m,x;signed main(){    cin>>n>>m>>x;    for(int i = 1 ; i >a;    int l = 0,r = 0;    int sum = 0,cnt = 0;    while(r < n)    {      while(r-l+1 < m){            r++;            sum+=a;            if(sum > x){                int res = sum-x;                cnt += res;a-=res;sum-=res;            }      }      sum-=a;l++;    }    coutm>>x;    for(int i = 1 ; i >a;    int l = 0,r = 0;    int sum = 0,cnt = 0;    //sum表示目前手里有的,cnt表示需要拿掉的糖果    while(r < n)    {      while(r-l+1 < m){            //如果不够的话就往后加//             cout

公新蕾 发表于 2026-2-13 17:49:59

这个好,看起来很实用

巨耗 发表于 2026-2-22 07:59:00

感谢分享,下载保存了,貌似很强大

获弃 发表于 2026-2-22 22:41:35

感谢分享,下载保存了,貌似很强大

骆贵 发表于 2026-2-25 05:52:22

懂技术并乐意极积无私分享的人越来越少。珍惜

卒挪 发表于 2026-2-25 12:01:49

这个有用。

坡琨 发表于 2026-2-25 21:30:17

感谢发布原创作品,程序园因你更精彩

俞秋荣 发表于 2026-3-8 08:16:13

感谢分享,学习下。

骆贵 发表于 2026-3-9 17:31:21

感谢分享,下载保存了,貌似很强大

涅牵 发表于 前天 21:47

用心讨论,共获提升!
页: [1]
查看完整版本: tracker 2026.02.07相邻的糖果 贪心+双指针