当前位置: 首页 > wzjs >正文

有没有做衣服的网站吗百度关键词推广帝搜软件

有没有做衣服的网站吗,百度关键词推广帝搜软件,电脑iis做网站,wordpress jekyll洛谷P1190 [NOIP 2010 普及组] 接水问题 题解 题目描述 P1190 接水问题 是NOIP 2010普及组的模拟题。题目大意如下: 有n个人要接水,每个水龙头同时只能供1个人使用。每个学生的接水时间已知,当某个水龙头空闲时,下一个等待的学…

洛谷P1190 [NOIP 2010 普及组] 接水问题 题解

题目描述

P1190 接水问题 是NOIP 2010普及组的模拟题。题目大意如下:

有n个人要接水,每个水龙头同时只能供1个人使用。每个学生的接水时间已知,当某个水龙头空闲时,下一个等待的学生会立即使用该水龙头。求所有人接完水的总时间。

输入格式

  • 第一行两个整数n,m(1≤m≤n≤10000)
  • 第二行n个整数,表示每个学生的接水时间

输出格式

  • 一个整数,表示总时间

解题思路

本题是典型的离散事件模拟问题,核心在于维护每个水龙头的可用时间,并动态分配学生到最早空闲的水龙头。

关键观察点

  1. 水龙头分配策略:当多个水龙头空闲时,应优先选择结束时间最早的水龙头(贪心策略)
  2. 时间推进方式:按最小时间单位逐步推进,每次处理所有当前时刻结束的任务

算法选择

  • 优先队列(堆):天然支持快速获取最小值,适合维护水龙头的可用时间
  • 模拟法:直接按时间步进模拟每个学生的接水过程

代码解析(附用户代码讲解)

以下是用户提供的代码的逐层解析:

#include<bits/stdc++.h>
using namespace std;int n,m;
int stu[10005]={};  // 存储每个学生的接水时间
int water[105]={0};  // 记录每个水龙头当前服务的学生编号(0表示空闲)void f() {int tem=0;// 初始化前m个水龙头(当m<=n时)for(int i=1;i<=m;++i) {if(i<=n) {tem++;water[i] = i;  // 分配前m个学生到对应水龙头}}int time=0;int cet=tem+1;  // 下一个待分配的学生编号int fla=1;       // 模拟进程标志while(fla) {fla=0;// 遍历所有水龙头for(int i=1;i<=tem;++i) {if(water[i]!=0) {  // 当前水龙头正在使用中fla=1;stu[water[i]]--;  // 减少剩余时间// 接水完成if(stu[water[i]]==0) {if(cet<=n) water[i] = cet++;  // 分配下一个学生else water[i] = 0;      // 无学生可分配}}}if(!fla) break;  // 所有水龙头空闲时结束time++;          // 时间推进1单位}cout<<time;
}int main() {cin>>n>>m;for(int i=1;i<=n;++i) cin>>stu[i];f();return 0;
}

代码特点分析

  1. 直接模拟法:通过逐时间单位推进,维护每个水龙头的状态
  2. 空间复杂度:O(n+m),适合题目给定范围
  3. 时间复杂度:O(n*m),最坏情况下(如所有学生接水时间相同)需要遍历所有水龙头

优化方案:优先队列实现

使用优先队列可将时间复杂度优化至O(n log m):

#include<bits/stdc++.h>
using namespace std;int main() {int n, m;cin >> n >> m;priority_queue<int, vector<int>, greater<int>> pq;  // 最小堆// 初始化m个水龙头的结束时间为0for(int i=0; i<m; ++i) pq.push(0);int res = 0;for(int i=0; i<n; ++i) {int t;cin >> t;int end_time = pq.top();pq.pop();res = max(res, end_time + t);  // 更新最大结束时间pq.push(end_time + t);}cout << res;return 0;
}

优化版优势

  1. 时间复杂度:O(n log m),适合更大规模的数据
  2. 实现简洁:无需显式维护水龙头状态
  3. 逻辑清晰:每次从堆顶取出最早空闲的水龙头

复杂度对比

版本时间复杂度空间复杂度适用场景
模拟法O(n*m)O(n+m)小规模数据(n≤1e4)
优先队列版O(n log m)O(m)大规模数据(n≤1e5+)

总结

  1. 本题核心是理解离散事件模拟的两种实现方式
  2. 优先队列方法在工程实践中更优,但模拟法有助于理解底层逻辑
  3. 实际编程时需注意:
    • 水龙头数量m可能大于学生数n的情况处理
    • 边界条件(如所有学生同时结束的情况)
    • 时间单位推进的精度问题

通过本题可以掌握:

  • 贪心算法的应用场景
  • 优先队列在调度问题中的典型用法
  • 时间复杂度优化的常见策略
http://www.dtcms.com/wzjs/229374.html

相关文章:

  • 潍坊做电商的网站建设新手20种引流推广方法
  • 做好门户网站建设seo网站推广首页排名
  • 大连龙彩科技的网站在谁家做郑州seo网站关键词优化
  • 标签系统做的好的网站免费注册网页网址
  • 中小型网站建设教程重庆seo整站优化
  • 用什么做响应式网站百度图片识别
  • 网站首页横版图怎么做全自动引流推广软件下载
  • 苏州网络公司建网站微信crm系统
  • 网站开发专业就业前景今天最新的新闻头条新闻
  • 广告设计与制作学啥seo排名赚靠谱吗
  • 营销网站建设哪家便宜免费的个人网站怎么做
  • 12380网站建设情况的报告东莞百度快速排名
  • 做一些网站犯法么seo权重优化
  • 厦门网站设计公司推荐技能培训网站
  • 成人网站建设成本微博推广
  • 苏州设计网站seo如何优化关键词
  • 新工商名录企业应用平台厦门seo培训
  • 安康网站建设政府网络广告案例
  • 手机网站建立网络整合营销的特点有
  • 给你一个新的网站怎么做谷歌官方seo入门指南
  • 操作简单网站搭建费用百度站长工具seo综合查询
  • 英文b2b网站制作南宁seo产品优化服务
  • 梧州网站建设费用网页制作的软件
  • 怎样在手机做自己的网站海外推广方法有哪些
  • 域名注册费用seo推广专员招聘
  • 网页设计作业网站关键词优化排名用哪个软件比较好
  • 海报设计网站免费推广方案框架
  • 网站备案 类型中国 日本 韩国
  • 如何组建做网站的团队seo网站优化工具
  • 网站开发图国家免费技能培训平台