链接:
https://leetcode.cn/problems/triples-with-bitwise-and-equal-to-zero/
题意:
模拟一个摩天轮,四个舱,每个舱最多四人,给一个数组,表示摩天轮每切换一次座舱会来多少人排队(人不会走)。每进一个人会得到runningCost
元,每切换一次座舱花费boardingCost
元。当切换到这个座舱时,如果里面有人会都下来(即上一轮进这个舱的人再到这个舱的时候就都出去了,舱空了)。
求进行几次切换赚的钱最多(即使有人没下来也没关系),如果没有利润为正方案,返回-1
解:
嗯模拟就好了,判断是否有人等待,计算赚到的钱-花费剩下的利润take
int take=up*boardingCost-(i+1)*runningCost;
(up是上去的人数,累积一下)
第一次没删除检验数据用的cout直接超时了,又写了个第二版,给自己蠢晕
实际代码:
int wait=0,ans=0,turn=0,up=0;
int lg=customers.size();
for(int i=0;i0;i++)
{
int add=0;
if(ians)
{
ans=take;turn=i+1;
}
}
return ans==0?-1:turn;
第二版,循环只遍历完了数组,剩下还在排队的人算两个结果
1.只上满舱(四个人四个人上)花费为t1
2.上完所有满仓,再上剩下的人(不满四个),花费为t2
#include
#include
using namespace std;
int solve(vector& customers, int boardingCost, int runningCost)
{
int wait=0,ans=0,turn=0,up=0,take;
int lg=customers.size();
for(int i=0;ians)
{
ans=take;turn=i+1;
}
}
//cout<ans)
{
ans=take+t1;turn=lg+(wait/4);
}
if(wait%4!=0)
{
int t2=t1+wait%4*boardingCost-runningCost;//cout<ans)
{
ans=take+t2;turn=lg+(wait/4+1);
}
}
return ans==0?-1:turn;
}
int main()
{
vector customers;
int boardingCost,runningCost;
int n;cin>>n;
for(int f=1;f<=n;f++)
{
int temp;cin>>temp;
customers.push_back(temp);
}
cin>>boardingCost>>runningCost;
int ans=solve(customers,boardingCost,runningCost);
cout<
限制:
n == customers.length
1 <= n <= 105
0 <= customers[i] <= 50
1 <= boardingCost, runningCost <= 100