C-晾衣服
2024-09-08 10:15:40
链接:https://ac.nowcoder.com/acm/contest/892/C
题意:
鸡尾酒从杭州回来,囤积了许多衣服,洗好之后,他发现晾衣服是一件麻烦的事。
晾衣绳的长度只有L,而鸡尾酒有N件衣服,每件衣服挂在衣架上之后可以横着晾或者竖着晾,横着晾比较占晾衣绳的地方,但是受光面积大,干得也快,竖着晾反之。
鸡尾酒每天都要专心卖萌,没时间管这些衣服,所以在挂好每件衣服之后就不会再调整,他只希望能最快的看到所有衣服全部被晾干。
请你帮鸡尾酒算算,假如他以最优决策挂衣服,最早经过多长时间,所有衣服都能被晾干。
如果他永远无法一次性晾干所有衣服,输出-1。
思路:
贪心没贪出来,赛后看是二分。
直接二分答案。
统计长度要用到longlong
代码:
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
const int MAXN = 2e5+10;
const int INF = 1e9; struct Node
{
int time, hlen, ht, slen, st;
int nht, nst;
void Init()
{
nht = (time+ht-1)/ht;
nst = (time+st-1)/st;
}
}node[MAXN];
int n, sum; bool Check(int time)
{
LL need = 0;
for (int i = 1;i <= n;i++)
{
if (node[i].nst <= time && node[i].nht <= time)
need += min(node[i].slen, node[i].hlen);
else if (node[i].nst <= time)
need += node[i].slen;
else if (node[i].nht <= time)
need += node[i].hlen;
else
return false;
}
if (need <= sum)
return true;
return false;
} int main()
{
scanf("%d%d", &n, &sum);
LL lesslen = 0;
for (int i = 1;i <= n;i++)
{
scanf("%d%d%d%d%d", &node[i].time, &node[i].hlen, &node[i].ht, &node[i].slen, &node[i].st);
lesslen += min(node[i].slen, node[i].hlen);
node[i].Init();
}
if (lesslen > sum)
{
cout << -1 << endl;
return 0;
}
int l = 1, r = 1e9;
int res;
while (l <= r)
{
int mid = (l+r)/2;
if (Check(mid))
{
res = mid;
r = mid-1;
}
else
{
l = mid+1;
}
}
cout << res << endl; return 0;
}
最新文章
- JS提交对象数组到服务端的方法总结(C#实例)
- 5分钟教你Windows 10中将“运行”固定到开始菜单
- c++ struct的两个注意点
- 在虚拟机上安装Ubutu完成后卡在VM Tool的安装上
- log4j+logback+slf4j+commons-logging的关系与调试
- PowerDesigner概念模型的Notation设置
- js文件缓存之版本管理
- c++之 常量
- 对[foreach]的浅究到发现[yield]
- Oracle wm_concat(列转行函数)实际使用
- 跑马灯、短信与反射EditText
- Spring 框架
- python写注册
- 一个Silverlight工程的各文件解析
- PHP-循环结构-数组
- 配置samba文件服务器
- Spring异步调用注解@Async的使用
- easyui datagrid取消点击行的选中事件
- Pandas.plot 做图 demo(scatter,bar,pie)
- Windows搭建Nexus3私服