首页 > 其他分享 >[2010年NOIP普及组] 接水问题

[2010年NOIP普及组] 接水问题

时间:2022-08-16 19:23:33浏览次数:185  
标签:普及 最长 NOIP min int 打水 水龙头 return 2010

[2010年NOIP普及组] 接水问题

  • 分析:根据题意,要输出所用时间最长的那个人(包括那个人在等待的时间),分为两种情况,第一种是水龙头多于要打水的人数,这种情况下就可以直接写一个比较函数输出最大的人打水所用的时间,另一种是水龙头少于要打水的人,这种情况就要写一个函数比较哪个打水的人用的时间最少,下一个没排上的人就接在用的时间最少的那个人后面,以此类推,最后再次调用函数比较谁用的时间最长,然后输出所用的最长时间。
  • #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int a[10001],b[1000001];//a水龙头数 b人数
    int findmax(int *a,int x,int y)//指针指向数组a
    {
    int k,max=0;
    for(int i=x;i<=y;i++)
    if(max<a[i])//每个人都有水龙头
    {//找用时最长的那个就行
    max=a[i];
    k=i;//确定位置 方便被调用
    }
    return k;
    }
    int findmin(int *a,int x,int y)
    {
    int k,min=999999;
    for(int i=x;i<=y;i++)
    if(min>a[i])//找已在的用时最短的
    {
    min=a[i];
    k=i;//确定位置 方便被调用
    }
    return k;
    }
    int main()
    {
    int n,m,i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    cin>>b[i];
    if(n<=m)//水龙头数多
    {
    j=findmax(b,1,n);
    cout<<b[j]<<endl;
    }
    else//人数多
    {
    for(i=1;i<=m;i++)
    a[i]=b[i];//将一开始就有水龙头的人先附上
    for(i=m+1;i<=n;i++)//从第一个没有水龙头的人开始
    {//加入后续打水学生
    j=findmin(a,1,m);
    a[j]+=b[i];
    }
    j=findmax(a,1,m);//再在全部完成后找用时最长的
    cout<<a[j]<<endl;
    }
    return 0;
    }


标签:普及,最长,NOIP,min,int,打水,水龙头,return,2010
From: https://www.cnblogs.com/xdzxjinghan/p/16592672.html

相关文章

  • 题解 [ZJOI2010]排列计数
    好题。%你赛考到了不会摆烂,后来发现原来有向下取整,题面没有。。。(就算有我也做不出来啦qAq首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数。首先最小的......
  • [2007年NOIP普及组] 纪念品分组
    [2007年NOIP普及组]纪念品分组思路:运用贪心算法。将纪念品按价格排序,然后一前一后两两组队,如果没有超过上限w,就组队成功;反之,就失败,较大的一个单独成一组,较小的再等别的来......
  • [2002年NOIP提高组] 均分纸牌
    [2002年NOIP提高组]均分纸牌思路:贪心算法。将n堆纸牌的平均数算出来,将每堆纸牌i与平均数的差值转到i+1堆纸牌上,每操作一步,计数器+1。最后输出操作步数就好。代码如下:#i......
  • [2002年NOIP提高组] 均分纸牌
    [2002年NOIP提高组]均分纸牌分析:根据题意,先求所有数字的平均数,然后遍历数字与平均数比较,如果大于平均数,那么后一堆纸牌加上前一堆纸牌多出来的,同时步数+1,反之如果小于平......
  • [NOIP2007 普及组] 纪念品分组
    题目链接:https://www.luogu.com.cn/problem/P1094试题分析:乐乐要进行分组,分组原则是一个组中最多两个数,且两数之和小于给定的上限值,乐乐想找到最少能分多少组。我们发现,这......
  • [2007年NOIP普及组] 纪念品分组
    分析:因为最多两个一组,所以可以按最大的和最小的一组,是否满足条件,如果满足,同时赋值0,.#include<bits/stdc++.h>usingnamespacestd;intn,m,i,a[300000],s=0,j;intmain()......
  • [NOIP2002 提高组] 均分纸牌
    题目链接:https://www.luogu.com.cn/problem/P1031试题分析:首先分析样例:输入样例后,我们要先求出平均值,进而求出与平均值的差值: 我们能够得到三次移动:1.  7向右-4变......
  • [2002年NOIP提高组] 均分纸牌
    分析:每次移动都需要将其补全或删掉,如果这个正好是平均数,则步骤次数不增加98176-1-27-40-34-4004-40000#include<bits/stdc++.h>usingnamespacestd;......
  • [2013年NOIP提高组] 积木大赛
    [2013年NOIP提高组]积木大赛思路:只需要进行n次循环,(两个数之间,如果后面的数大于前面的)用后面的数-前面的差值累加,就能得出操作次数啦~代码如下:#include<iostream>#incl......
  • [2004年NOIP普及组] FBI树
    [2004年NOIP普及组]FBI树思路:运用递归。已知“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。写一个后序遍历的函......