蔚来(NIO)周赛编程题

感觉NIO的题就恰到好处,刚好你能用暴力法写出来(但是无法通过),更好的方法又不会

5801. 消灭怪物的最大数量

https://leetcode-cn.com/contest/weekly-contest-248/problems/eliminate-maximum-number-of-monsters/

我的代码

class Solution {
public:

    int kill(vector<int> m,int num,vector<int>& dist, vector<int>& speed){
        int flag=0;//是否已经有一个0了
        for(int i=0;i<dist.size();i++){
            m.push_back(dist[i]-speed[i]);
            if(flag==1&&m[i]<=0) break;
            if(m[i]<=0) {
                flag=1;//数组里已经有一个0 不能再出现一个0了
                num++;//这个0被杀掉 
                m[i]=999;
                }
            
        }//m结束一轮循环之后要开始新的一轮
        if(num==dist.size()) return num;
        kill(m,num,dist,speed);
        return num;
    }
    int eliminateMaximum(vector<int>& dist, vector<int>& speed) {
        vector<int> m;
        int num=0;//消灭的怪物数
        return kill(m,num,dist,speed);
    }
        
};

大佬代码

#include<vector>
#include<iostream>
#include<algorithm>

using namespace std;
class Solution {
public:
	int eliminateMaximum(vector<int>& dist, vector<int>& speed) {
		vector<double> t;
		for (int i = 0; i < dist.size(); ++i) {
			t.push_back(double(dist[i]) / speed[i]);
		}
		sort(t.begin(), t.end());
		int ans = 0;
		for (int i = 0; i < dist.size(); ++i) {
			if (t[i] > i) ++ans;
			else return ans;
		}
		return ans;

	}
};
int main(){
	Solution a;
	vector<int> dist = { 1,3,4 };
	vector<int> speed = { 1,1,1 };
	cout<<a.eliminateMaximum(dist,speed);
	system("pause");
	return 0;
}

这个方法很有意思,用距离除以速度,然后排序,数组中第一个数就是第一枪要打的,第二个数字就是第二枪要打的,如果t[i] > i则说明来不及打了,就直接return

5802. 统计好数字的数目

https://leetcode-cn.com/contest/weekly-contest-248/problems/count-good-numbers/

我写的代码,很好理解,但是超时了

class Solution {
public:
    int countGoodNumbers(long long n) {


        //偶数有0,2,4,6,8一共5个
        //质数有2,3,5,7一共4个
        long long res=1;
        long long chu=1e9 + 7;
        
        for(long long i=0;i<n/2;i++){

            res=res*5*4%chu;
        }

        if(n%2) res=res*5%chu;
        else res=res%chu;
        return res;
}
};

大佬都用了快速幂算法

在这里插入图片描述
(发现我在做题的时候就用到了这个方法 但是还是超时了)
参考

https://blog.csdn.net/qq_19782019/article/details/85621386

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int countGoodNumbers(long long n) {
      if(n&1) return bp(n/2,4)*bp((n+1)/2,5)%chu;
        else return bp(n/2,4)*bp(n/2,5)%chu;
    }
private:
    long long chu=1e9+7;
    long long bp(long long power,long long base){
        long long result=1;
        while(power>0){
            if(power&1){
                result=result*base%chu;
            }
              power>>=1;  
            base=base*base%chu; 
         
        }
    return result;
    }
};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值