博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces B.Fence 解题报告
阅读量:4974 次
发布时间:2019-06-12

本文共 1318 字,大约阅读时间需要 4 分钟。

题目链接:

题目意思:给定整数n和k,需要从n个数中找出连续的k个数之和最小,输出这连续的k个数中的第一个数的下标。

       直接暴力果断TLE,于是想到之前做的那条 DP题的做法,决定开多一个额外的数组b[],在输入的时候把a[i]中前i个数的和都记录到b[i]中,这样通过b[i] - b[i-k]即可得出序列h1, h2, ..., hn (1 ≤ hi ≤ 100) 所有连续的k个数之和。特别要注意,当i-k >= 0的时候才能进行相减的操作,防止数组下标越界。

       还有另外mint 的设置要足够的大。考虑到 hi 最大为100,k最大为1.5·105, 即连续k个数的和最大为1.5 * 10^7 ,那么mint初始时要比这个数大,这里我设为100000000 。 

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 const int maxn = 2 * 1e6; 7 int a[maxn], b[maxn], s[maxn]; 8 9 int main()10 {11 int i, k, n, mini, tmpi, mint, sum; 12 while (scanf("%d%d", &n, &k) != EOF)13 {14 mint = 100000000;15 mini = 1;16 for (i = 1; i <= n; i++)17 {18 scanf("%d", &a[i]);19 if (i == 1)20 b[i] = a[i];21 else22 b[i] = b[i-1] + a[i];23 if (i-k >= 0)24 {25 sum = b[i] - b[i-k];26 tmpi = i-k+1;27 if (sum < mint) // 每当当前的sum比mint小都要更新mini的值,表示sum里面中的第一个数的下标 28 {29 mint = sum;30 mini = tmpi;31 }32 }33 }34 printf("%d\n", mini);35 }36 return 0;37 }

 

转载于:https://www.cnblogs.com/windysai/p/3431668.html

你可能感兴趣的文章
java-面向对象编程
查看>>
TCP协议
查看>>
【iOS学习笔记】01-开篇
查看>>
MySQL多实例安装
查看>>
用一个玩具例子说明基于视频的超分辨率重建的基本思想
查看>>
集训 D1T1 clique
查看>>
ContentProvider类的设计分析
查看>>
Codeforces 869E The Untended Antiquity
查看>>
boost 相关
查看>>
在Ubuntu Server下搭建LAMP环境
查看>>
Android开发详解之onTouch和onClick详解
查看>>
nodejs dateformat date-utils
查看>>
【sicily】卡片游戏
查看>>
日志系统:数据来源的思考
查看>>
第一次写代码总结
查看>>
[转帖] sparkdev 的 博客 systemd
查看>>
[cnbeta] 波音系列飞机价格。。。
查看>>
MSTSC 3389 端口修改
查看>>
Java数据类型的位数
查看>>
旁门左道通过JS与纯CSS实现显示隐藏层
查看>>