2023-03-05力扣每日一题

链接:

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

你可能感兴趣的:(力扣每日一题,leetcode,每日一题)