zoukankan      html  css  js  c++  java
  • codeforces B.Fence 解题报告

    题目链接:http://codeforces.com/problemset/problem/363/B

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

           直接暴力果断TLE,于是想到之前做的那条332B - Maximum Absurdity 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 <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     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             else
    22                 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 ", mini); 35 } 36 return 0; 37 }
  • 相关阅读:
    git安装
    git
    运维项目维护个人总结经验
    redis基本命令
    mysql基础常用命令
    进入Linux单用户模式
    Nginx查看并发链接数
    linux编写脚本检测本机链接指定IP段是否畅通
    集体干死java 在启动.sh
    系统优化小脚本
  • 原文地址:https://www.cnblogs.com/windysai/p/3431668.html
Copyright © 2011-2022 走看看