奶牛晒衣服
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奶牛晒衣服相关的知识,希望对你有一定的参考价值。
“愉快”的端午欢乐赛就这样落下了帷幕,作为蒟蒻的我显然是来给各位dalao垫名次的。。
【问题描述】
在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。
圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1的时间可以晒干A点湿度。抠门的熊大妈买了1台烘干机。使用烘干机可以让你用1的时间使1件衣服除开自然晒干的A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用。
N件衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。
【输入格式】
输入文件dry.in第一行N,A,B;接下来N行,每行一个数,表示衣服的湿度.
【输出格式】
输出文件dry.out一行,最少时间t
【输入输出样例】
dry.in |
dry.out |
4 1 1 1 1 2 3 |
2 |
【数据规模】
60% t*N<1000000000
100% 1<=湿度,A,B<=500000,1<=N<=500000
看到题后直接就想到了sort,然鹅炸了五个点,一个点很玄学的WA。。
显然用优先队列就会好很多,并且很简洁方便。
#include<cstdio> #include<queue> #include<algorithm> using namespace std; int N,A,B,t; int main() { priority_queue<int> q; scanf("%d%d%d",&N,&A,&B); for(int i=1;i<=N;++i) { int x; scanf("%d",&x); q.push(x); } for(;;) { ++t; int Mx=q.top(); q.pop(); Mx-=B; q.push(Mx); int m=q.top(); if(A*t>=m) break; } printf("%d\n",t); return 0; }
下面是队列相关
头文件:#include<queue>
定义队列:queue<类型>名称
常用函数:以队列q,元素有5,7,4,2,6为例
q.push(3)->入队,3,5,7,4,2,6
q.pop()->出队,7,4,2,6
q.size()->计算队列中元素个数,cnt=5
q.empty()->判断队列是否为空,空则返回true
q.front()->取队首元素但不消除,head=5,q=5,7,4,2,6
q.back()->取队尾元素但不消除,last=6,q=5,7,4,2,6
优先队列:priority_queue<类型>名称(优先队列真的是好好用qwq)
优先队列和队列类似,但排在队首的元素是队列中优先级最高的元素,pq是一个越小的整数优先级越高的队列,函数同队列基本一样,只是取队首元素需要用q.top()而不是q.front
以上是关于奶牛晒衣服的主要内容,如果未能解决你的问题,请参考以下文章