Hihocoder #1631 : Cats and Fish 模拟
2017-11-27 15:46
344 查看
题意
现有n个鱼 m个猫 每条猫有吃一条鱼所要花去的时间问最终x分钟后会有多少只完整的鱼 和不完整的鱼
分析
很像操作系统的资源调度的问题这种卡时间点的问题向来都要好好把
每个步骤所发生的时间给他具体化
我们看每只猫吃一条鱼花去ci分钟 而他是在这一分钟开始的时刻开始吃的
放到时间轴里就是 0-1-2-3-4-… 、
定义时间点表示在ti分钟之后
所有猫在0时刻开始的时间点申请吃鱼
然后在第ci分钟处吃完 假如这只猫吃一条鱼花3分钟 那么他应该在2,3交界的位置把完成吃完这条鱼
如果把时间轴用循环模拟 应该在循环变量为2的时候完成吃完 那么当第3分钟开始时 也就是3分钟以后
开始申请吃下一条鱼
那么所有的过程模拟下来就是
从开始吃 鱼–不完整的鱼的数量++
吃完的时候 不完整的鱼–
过了下一整点 再开始吃 鱼– 不完整鱼数量++
那么关于如何模拟吃和完成吃的过程
申请吃可以用个堆 优先选择吃的快的
完成吃就可以放到一个完成吃的队列里搞搞
code
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int m,n,x; while(~scanf("%d%d%d",&n,&m,&x)) { int y=0; priority_queue<int,vector<int>,greater<int> >eat[3002]; vector<int>fis[3003]; for(int i=1;i<=m;i++){ int t; scanf("%d",&t); eat[0].push(t); } for(int t=0;t!=x;t++){ //当前分钟 吃的过程 while(!eat[t].empty()){ int to = eat[t].top();//得到此刻申请资源的猫 以及他的速度 eat[t].pop(); if(n>0){ n--,y++;//吃了 把余++ if(to==1)fis[t].push_back(to);//设定完成时间 else fis[t+to-1].push_back(to);//这里不是+to时间 而是在+to和上一分钟的交界处完成 我们把他分给上一分钟 } } //当前分钟 吃完成的过程 fis为当前分钟末尾处理 for(int i=0;i<fis[t].size();i++){ int f = fis[t][i];//当前的鱼吃完了 y--;//吃完了后要接着吃 不过是下一分钟开始的时候吃 eat[t+1].push(f); } //一个i代表 一个完整的分钟 } printf("%d %d\n",n,y); } return 0; }
相关文章推荐
- HihoCoder - 1631 Cats and Fish (2017ICPC北京站 模拟)
- ACM-ICPC北京赛区2017网络同步赛 题目5 : Cats and Fish【模拟】
- hihocoder 1631 Cats and Fish
- #1631 : Cats and Fish
- Cats and Fish 2017ACM-ICPC北京赛区/hihoCoder 1631
- Cats and Fish(模拟)
- icpc-beijing-cats and fish
- 2017 ICPC beijing E - Cats and Fish
- POj 1879 Tempus et mobilius Time and motion (模拟+群)
- Codeforces Round #403 (Div. 2) A. Andryusha and Socks(简单模拟)
- UVAlive 7487 Association of Cats and Magical Lights(线段树)
- Codeforces Round 389 Div.2 B. Santa Claus and Keyboard Check(模拟)
- Codeforces Round #389 (Div. 2)B. Santa Claus and Keyboard Check(模拟)
- HDU-5611 Baby Ming and phone number(模拟)
- Codeforces 719C - Efim and Strange Grade (模拟
- POJ 2039 TO and Fro(模拟)
- Codeforces-Good Bye 2017 B. New Year and Buggy Bot(模拟)
- Codeforces Round #281 (Div. 2) A. Vasya and Football(模拟)
- 模拟,bfs(HDU 5336,XYZ and Drops)
- POJ 3393:Lucky and Good Months by Gregorian Calendar 年+星期 模拟