本文主要是介绍P1614 爱与愁的心痛(双指针),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目背景
(本道题目隐藏了两首歌名,找找看哪~~~)
《爱与愁的故事第一弹·heartache》第一章。
《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……
题目描述
最近有 n 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 m 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。
输入格式
第一行有两个用空格隔开的整数,分别代表 n 和 m。
第 2 到第 (n+1) 行,每行一个整数,第 (i+1) 行的整数 ai 代表第 i 件事的刺痛值 ai。
输出格式
输出一行一个整数,表示连续 m 个刺痛值的和的最小值是多少。
输入输出样例
输入
8 3 1 4 7 3 1 2 4 3
输出
6
说明/提示
数据规模与约定
- 对于 30% 的数据,保证 n≤20。
- 对于 60% 的数据,保证 n≤100。
- 对于 90% 的数据,保证 n≤103。
- 对于 100% 的数据,保证 0≤m≤n≤3×103,1≤ai≤100。
AC代码:
#include<bits/stdc++.h>using namespace std;const int N = 1e4;
int q[N];//用来存刺痛值 int main()
{int n,m;cin >> n >> m;//对 0 0 数据 做一个特判,非常坑的地方 if(n == 0 && m == 0){printf("0");return 0;}//sum用来求连续m个数的值,minx存最小值 int sum = 0,minx = 0x3f3f3f;for(int i=1;i<=n;i++) cin >> q[i];int j = 1,k=1;for(int i=1;i<=n;i++){sum = q[i];//m个数一循环 while(k % m != 0){k++;j++;sum += q[j];}if(k % m == 0 && n - i + 1 >= m){minx = min(minx,sum);k = 1;}j = i + 1;}cout << minx << endl;return 0;
}
这篇关于P1614 爱与愁的心痛(双指针)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!