leetcode周赛_leetcode周赛可以百度吗-程序员宅基地

技术标签: 算法  leetcode  职场和发展  


70周双周赛(2/4)

第三题 5973. K Highest Ranked Items Within a Price Range

https://leetcode-cn.com/problems/k-highest-ranked-items-within-a-price-range/

//learn
//tuple
//auto [steps, i, j]
//默认sort从前到后 从小到大 nb!
//emplace & emplace_back

const int d[4][2] = {
    {
    -1, 0}, {
    0, -1}, {
    0, 1}, {
    1, 0}};
class Solution {
    
public:
    vector<vector<int>> highestRankedKItems(vector<vector<int>>& grid, vector<int>& pricing, vector<int>& start, int k) {
    
        int n = grid.size(), m = grid[0].size();
        int lo = pricing[0], hi = pricing[1];
        int r = start[0], c = start[1];
        vector<tuple<int, int, int, int>> ans;//steps, price, i, j
        queue<tuple<int, int, int>> q; //step, startx, starty
        vector<vector<bool>> vis(n, vector<bool>(m));
        
        //first
        q.emplace(0, r, c); 
        vis[r][c] = true;

        //bfs:用bfs是因为每次只扩大一个距离,所以可以用vis标记 之后不查 因为之后查的step肯定更大
        while (!q.empty()) {
    
            auto [steps, i, j] = q.front(); 
            if (grid[i][j] >= lo && grid[i][j] <= hi)
                ans.emplace_back(steps, grid[i][j], i, j);
            q.pop();
            for (int t = 0; t < 4; ++t) {
    
                int ni = i + d[t][0], nj = j + d[t][1];
                if (ni < 0 || ni >= n || nj < 0 || nj >= m || vis[ni][nj] || grid[ni][nj] == 0)
                    continue;
                q.emplace(steps + 1, ni, nj);
                vis[ni][nj] = true;
            }
        }
        sort(ans.begin(), ans.end()); //默认sort从前到后 从小到大 nb!
        vector<vector<int>> ret;
        for (int i = 0; i < min(k, (int)ans.size()); ++i)
            ret.push_back(vector<int>{
    get<2>(ans[i]), get<3>(ans[i])});
        return ret;
    }
};    

71周双周赛

5986
https://leetcode-cn.com/problems/minimum-cost-to-set-cooking-time/
不需要上来就想细节怎么做
先想模拟的大块

/*
耐心读题 耐心模拟
*/
class Solution {
    
public:
    string normal0(int targetSeconds){
    
        string str;
        int second = targetSeconds % 60;
        int fen = targetSeconds / 60;
        if(fen>99) return "0000";
        if(fen<10){
    
            str = "0" + to_string(fen); 
        }else{
    
            str = to_string(fen);
        }
        if(second<10){
    
            str += "0" + to_string(second); 
        }else{
    
            str += to_string(second);
        }
        return str;
    }
    //+60
    string normal1(int targetSeconds){
    
        string str;
        int second = targetSeconds % 60 + 60;
        if(second>99) return "0000";
        
        int fen = targetSeconds / 60 - 1;
        if(fen<10){
    
            str = "0" + to_string(fen); 
        }else{
    
            str = to_string(fen);
        }
        if(second<10){
    
            str += "0" + to_string(second); 
        }else{
    
            str += to_string(second);
        }
        return str;
    }
    
    int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
    
        string normal = normal0(targetSeconds);
        string n1 = normal;
        // if(n1[0]!='0'||n1[1]!='0'){
    
        //     n1 = normal1(targetSeconds);
        // }
        n1 = normal1(targetSeconds);
        cout<<normal<<" "<<n1<<endl;
        
        int move = 0;
        int push = 0;
        int cur = startAt;
        int begin = 0;
        int res = INT_MAX;
        //cal normal
        if(normal!="0000"){
    
            while(begin!=4){
    
                if(normal[begin]=='0'&&push==0){
    
                    begin++;
                    continue;
                }
                if((normal[begin]-'0')!=cur){
    
                    move++;
                }
                cur = normal[begin]-'0';
                push++;
                begin++;
            }
            if(moveCost * move + pushCost * push != 0){
    
                res = moveCost * move + pushCost * push;    
            }
            cout<<move<<" "<<push<<" "<<res<<endl;
        }
        move = 0;
        push = 0;
        begin = 0;
        cur = startAt;
        //cal n1
        if(n1!="0000"){
    
            while(begin!=4){
    
                if(n1[begin]=='0'&&push==0){
    
                    begin++;
                    continue;
                }
                if((n1[begin]-'0')!=cur){
    
                    move++;
                }    
                cur = n1[begin]-'0';
                push++;
                begin++;
            }  
            if(moveCost * move + pushCost * push != 0){
    
                res = min(res,moveCost * move + pushCost * push);
            }
            cout<<move<<" "<<push<<" "<<res<<endl;
        }
        
        return res;
    }
};

补题
https://leetcode-cn.com/problems/minimum-difference-in-sums-after-removal-of-elements/

282场周赛 2/4

T3 6010

超时想想二分
https://leetcode-cn.com/problems/minimum-time-to-complete-trips/solution/6010-chao-shi-shi-xiang-xiang-er-fen-by-3q7is/

二分模版
while l < r:
m = (l + r) >> 1
if check(m):
l = m + 1
else:
r = m

对于二分查找,一般可用以下模板,注意区别。另外可用类似 m = l + (r - l) / 2的方式解决溢出的问题。

有几场发布在了leetcode题解中

285 1/4

T3 6029

二进制枚举

x >> y //x右移y位
x << y //x左移y位

//贪心失败
//状压二进制枚举 / 01背包
//https://leetcode-cn.com/problems/maximum-points-in-an-archery-competition/solution/by-ctysss-6r70/ 
/*
转自-wannabeaguard
以前听到状态压缩,听到二进制就后退三步,做了几道类似的题貌似有一点点上道了。其实就是一种暴力美学,尤其在n<=20这种数量级,枚举所有的可能性也就是10^6这个数量级。

对于这道题来说,要枚举的就是bob可以在哪些区域赢,每个区域都有输赢两种可能,所以所有的可能方案有2^12=4096种,这个数量级就直接暴力憋犹豫了。

遍历[0,4096),每个数字表示bob的战况
比如0,二进制是"000000000000",表示bob在所有区域都输了
比如1,二进制是"000000000001",表示bob在区域1赢了
比如5,二进制是"000000000101",表示bob在区域1和区域3赢了
bob在每个赢的区域至少要比alice多射出一支箭,如果总射箭数目<=numArrows,那么就是合法的方案之一
返回最高得分的方案就可以啦

*/
class Solution {
    
public:
    vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) {
    
        int n = aliceArrows.size();
        int maxScore = 0;
        vector<int> ans(n);
        /* 二进制枚举 */
        for (int i = 0; i < (1 << n); i++) {
     
            // 代表一种bob的胜场情况 最大值是111111111(12个)
            // 所以边界为 1000000(12个0)于是将1左移12位
            int usedArrows = 0;
            int curScore   = 0;
            vector<int> bobArrows(n);
            for (int j = 0; j < n; j++) {
     //这种胜场情况的每一个区域的情况
                if (((i >> j) & 1) == 1) {
    
                    usedArrows += aliceArrows[j] + 1;  /* 使用的箭数 */
                    curScore   += j;                   /* 得分 */ 
                    bobArrows[j] = aliceArrows[j] + 1; /* 每一轮射中数 */
                }
            }
            /* 使用的总箭数有剩余, 且有更大值 */
            if (usedArrows <= numArrows && curScore > maxScore) {
    
                maxScore = curScore;
                ans = bobArrows;
                ans[0] += numArrows - usedArrows;
            }
        }
        return ans;
    }
};


T3 6027 前缀和

https://leetcode-cn.com/problems/maximum-trailing-zeros-in-a-cornered-path/solution/6027-by-flytowns-73nh/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/flytowns/article/details/122646482

智能推荐

面向amd64的XXX与与项目的目标平台“x86”不兼容-程序员宅基地

打开IIS服务器,选择应用程序池,设置中,有一个打开32位程序,选择FALSE,如果开启,在64位下就会出错。一般关闭转载于:https://www.cnblogs.com/wility/p/4305610.html...

王者服务器维护8月25,王者荣耀8月25日英雄调整有哪些 8月25日英雄调整内容汇总...-程序员宅基地

王者荣耀v1.20.1.37 安卓最新官方版类型:角色扮演大小:471M语言:中文 评分:7.7标签:立即下载王者荣耀8月25日英雄调整内容汇总一览,王者荣耀体验服8月25日进行维护更新,一大波英雄技能都有很大的调整,宫本武藏又又又被削了,那么王者荣耀8月25日英雄调整有哪些,西西带来8月25日英雄调整内容汇总,希望对大家有所帮助。王者荣耀8月25日英雄调整内容汇总一。英雄调整1.花木兰花木兰在上...

mysql中text,longtext,mediumtext字段类型的意思,以及区别 -程序员宅基地

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。 由MySQL支持的列类型列在下面。下列代码字母用于描述中: M 指出最大的显示尺寸。最大的合法的显示尺寸是 ...

某家具企业公司0day|0day发布_up_bookpicpro.asp漏洞-程序员宅基地

谷歌搜索:inurl:pro_list.asp?bookid=关键字 inurl:..?bookid=196默认数据库下载:db\hualiang#.mdb7789dianying默认后台: /manage/login.asp拿shell方法:iis解析漏洞:漏洞页面:Up_BookPic.asp?formname=myform&editname=samll_pic_up_bookpicpro.asp漏洞

WPF Trigger_wpf rowheader 的trigger-程序员宅基地

Trigger分类TriggerMultiTriggerDataTriggerMultiDataTriggerEventTriggerTrigger<Grid> <Grid.Resources> <Style x:Key="ButtonStyle" TargetType="Button"> <Setter Property="Foreground" Value="DarkOrange"></Setter> <S_wpf rowheader 的trigger

SmartGit19继续使用(windows和mac os)_smartgit 19 for mac-程序员宅基地

以下方法可以过期后继续使用smartgit 30后需要输入序列号解决办法 ,找到路径: %APPDATA%\syntevo\SmartGit\然后删除: preferences.yml 再重新打开smartgit首先关闭首先关闭SmartGit,windows+R:输入 %APPDATA%\syntevo\SmartGit\ 点击确定,或直接输入地址在文件夹栏输入,找..._smartgit 19 for mac

随便推点

c++,vc6.0 报错unreferenced local variable-程序员宅基地

c++,vc6.0 报错 unreferenced local variable原因,有的东西没有用到,如果真的没有用的话可以直接删掉。

分享下我去独角兽公司的 Java 终极三面经历...-程序员宅基地

分享一下前段时间自己第三面的面试经历吧,虽然现在入职的不是 BAT,但也算是细分领域里的准独角兽公司了,希望可以对你有所帮助哈。面试官:一面、二面他们对你的评价很高啊。我看你写着精通 S...

CSS 实现内阴影的方法_css 内阴影_代码搬运媛的博客-程序员宅基地

其实就是一个 inset 就解决了,主要是用的太少,不太熟悉这个属性。知识点:box-shadow。_css 内阴影

linux搜索神器-程序员宅基地

the silver searcher安装brew install the_silver_searcher搜索包含字符串的文件列表ag 'adsa'ag 'abc' ./搜索指定类型文件内包含字符串的文件列表ag --php 'abc' ./ag -G '.+\.php' 'abc' ./搜索文件名ag -g "order.blade"...

推荐文章

热门文章

相关标签