首页 > 其他分享 >第 360 场周赛 (二进制枚举、树上倍增)

第 360 场周赛 (二进制枚举、树上倍增)

时间:2023-08-28 21:34:32浏览次数:45  
标签:周赛 target int sum ++ 枚举 ans tt 360

2833. 距离原点最远的点

 

本题要求最远的距离,所有‘_’必须全为左或全为右。利用前缀和的思想看看L多还是R多,最后加上_的数目就是答案。

class Solution {
public:
    int furthestDistanceFromOrigin(string moves) {
        int n = moves.size();
        int tt = 0, lc = 0, rc = 0, tc = 0;
        for(auto it: moves) {
            if(it == '_') {
                tc ++ ;
                continue;
            } else if(it == 'L') {
                lc ++ ;
                tt -- ;
            } else {
                rc ++ ;
                tt ++ ;
            }
        }

        if(tt == 0) {
            return tc;
        } else {
            return abs(tt) + tc;
        }
    }
};



2834. 找出美丽数组的最小和

 一个简单的哈希表

class Solution {
public:
    long long minimumPossibleSum(int n, int target) {
        long long cnt = 0, sum = 0;
        unordered_map<int, int> mp;
        for(int i = 1; ; i ++ ) {
            if(mp[i]) continue;
            sum += i, cnt ++ ;
            if(cnt == n) break;
            mp[target - i] ++ ;
        }

        return sum;
    }
};

 

2835. 使子序列的和等于目标的最少操作次数

 若nums的和大于target,由于可以不断除以2会变为1,所以此时一定是有解的。

从二进制的角度看问题,若target的第i位为0,则跳过

            若target的第i为为1,则先看<= 2**i的数能否拼出target & mask, 其中mask为(2 ** (i + 1))-1。target&mask表示后i位。若能拼出,则不需要操作。若不                      能拼出则找出更大的2的次幂,将其分解为 2 ** i 

class Solution:
    def minOperations(self, nums: List[int], target: int) -> int:
        if sum(nums) < target:
            return -1
        
        cnt = Counter(nums)
        ans = s = i = 0

        while 1 << i <= target:
            s += cnt[1 << i] << i
            mask = (1 << (i + 1)) - 1
            i += 1
            if s >= target & mask:
                continue
            
            ans += 1
            while cnt[1 << i] == 0:
                ans += 1
                i += 1
        
        return ans

 

2836. 在传球游戏中最大化函数值

 

树上倍增算法 = 动态规划 + 二进制枚举、 f[i][j] 表示从第i个点开始,操作 2 ** j次到达的节点中路径的权值和。 节点信息转移方程:f[i][j] = f[f[i][j - 1]][j - 1]  额外信息为: g[i][j] = g[i][j - 1] + g[f[i][j - 1]][j - 1]
class Solution:
    def getMaxFunctionValue(self, receiver: List[int], k: int) -> int:
        n = len(receiver)
        m = k.bit_length() - 1
        pa = [[(p, p)] + [None] * m for p in receiver]  //这里是记录两维信息

        for i in range(m):
            for x in range(n):
                p, s = pa[x][i]
                pp, ss = pa[p][i]
                pa[x][i + 1] = (pp, s + ss)
        

        ans = 0
        for i in range(n):
            x = sum = i
            for j in range(m + 1):
                if (k >> j) & 1:
                    x, s = pa[x][j]
                    sum += s
            ans = max(ans, sum)

        return ans

 

 

标签:周赛,target,int,sum,++,枚举,ans,tt,360
From: https://www.cnblogs.com/zk6696/p/17663431.html

相关文章

  • 2835. 使子序列的和等于目标的最少操作次数-360
    使子序列的和等于目标的最少操作次数给你一个下标从0开始的数组nums,它包含非负整数,且全部为2的幂,同时给你一个整数target。一次操作中,你必须对数组做以下修改:选择数组中一个元素nums[i],满足nums[i]>1。将nums[i]从数组中删除。在nums的末尾添加两个......
  • C++11——5.9 强类型枚举
    详细介绍请见:★★★原文链接★★★:https://subingwen.cn/cpp/enum/ 枚举语法(C++98):关键字enum 枚举名字(可以不写,不写就是匿名枚举) {枚举值};#include<iostream>usingnamespacestd;//枚举在相同作用域内全局范围内可见(定义在类内就类内全局可见;定义在全局就全......
  • Acwing. 第 118 场周赛
    Acwing.第118场周赛比赛链接这几天开学了,一直在宿舍歇着来着,从下周一开始就要开始加训了!!!A题循环串:给定两个整数n,a,请你用前a个小写字母为循环节,构成一个无限长的循环字符串,然后输出该字符串的前n个字符。例如,当a=2时,循环字符串为ababab...,当a=3时,循环字符串为......
  • iOS开发Swift-枚举
    枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。1.枚举语法//枚举成员不会被赋予默认的整型值。成员本身就是完备的值,类型为CompassPoint。enumCompassPoint{casenorthcasesouthcaseeastcasewest}//或者en......
  • 枚举显示
    控制器写:///<summary>///将妊检结果枚举转为数组///</summary>///<returns></returns>[HttpGet]publicIActionResultPregnancytestResultEnum(){List<object>list=newList<objec......
  • NOIP 2023 周赛 3 题解
    A-Permutationsummarization构造一个\(1\dotsn\)的排列使\(\prod\limits_{i=1}^n\operatorname{lcm}(p_i,p_{(i\bmodn)+1})\)最大。solution不难发现上式最大为\(\prod\limits_{i=1}^ni^2\),即让所有\(\operatorname{lcm}(x,y)=x\timesy\),那么只要使相邻两个数互质......
  • 枚举参数的参数化@EnumSource
    使用枚举类作为测试数据。枚举参数参数化注解 @EnumSource。必须与 @ParameterizedTest 结合使用。需要添加@EnumSource注解测试方法传入枚举类作为参数packagecom.mytest;importorg.junit.jupiter.params.ParameterizedTest;importorg.junit.jupiter.params.pro......
  • swift学习笔记之---数组、字典、枚举、结构体
    1、数组-Arraylettypes=["none","warning","error"]//省略类型的数组声明letmenbers=[String]()//声明一个空数组menbers.append("six")//添加元素menbers+=["seven"]//添加元素menbers.insert("one"......
  • GC的前置工作,聊聊GC是如何快速枚举根节点的
    本文已收录至GitHub,推荐阅读......
  • GC的前置工作,聊聊GC是如何快速枚举根节点的
    本文已收录至GitHub,推荐阅读......