首页 > 其他分享 >力扣第335场周赛补题题解

力扣第335场周赛补题题解

时间:2023-03-05 12:56:58浏览次数:30  
标签:cnt return int 题解 力扣 补题 maxpos root dp

目录

1. 递枕头

class Solution {
public:
    int passThePillow(int n, int time) {
        int mor = time%(2*(n-1));
        if(mor >= n-1){
            return n-(mor-(n-1));
        }else{
            return mor+1;
        }
    }
};

总结:
按题意模拟即可

2. 二叉树中的第 K 大层和

class Solution {
public:
    long long cnt[100010];
    int maxpos = 0;
    void dfs(TreeNode* root, int pos)
    {
        if(root == NULL){
            return;
        }
        maxpos = max(maxpos, pos);
        cnt[pos] += root->val;
        dfs(root->left, pos+1);
        dfs(root->right, pos+1);
    }
    long long kthLargestLevelSum(TreeNode* root, int k) {
        
        dfs(root, 1);
        if(k > maxpos){
            return -1;
        }
        sort(cnt+1, cnt+maxpos+1);
        return cnt[maxpos-k+1];
    }
};

总结:
dfs跑一遍树, 用数组记录每层的层和

3. 分割数组使乘积互质

class Solution {
public:
    int isPrime[1010];
    int Prime[1000010], cnt;
    void init()
    {
        isPrime[1] = 1;
        for(int i=2;i<=1000;++i){
            if(!isPrime[i]){
                Prime[++cnt] = i;
            }
            for(int j=1;j<=cnt && i*Prime[j] <= 1000; ++j){
                isPrime[i*Prime[j]] = 1;
                if(i%Prime[j] == 0){
                    break;
                }
            }
        }
    }
    int cnt1[1000010], cnt2[1000010];
    bool check()
    {
        for(int i=1;i<=cnt;++i){
            if(cnt1[Prime[i]] && cnt2[Prime[i]]){
                return false;
            }
        }
        return true;
    }
    int findValidSplit(vector<int>& nums) {
        init();
        int len = nums.size();
        for(int i=0;i<len;++i){
            int temp = nums[i];
            for(int j=1;Prime[j] <= 1000 && j<=cnt;++j){
                while(temp % Prime[j] == 0){
                    ++cnt2[Prime[j]];
                    temp /= Prime[j];
                }
            }
            if(temp > 1){
                ++cnt2[temp];
                Prime[++cnt] = temp;
            }
        }
        
        for(int i=0;i<len-1;++i){
            int temp = nums[i];
            for(int j=1;Prime[j] <= 1000 && j<=cnt;++j){
                while(temp % Prime[j] == 0){
                    ++cnt1[Prime[j]];
                    --cnt2[Prime[j]];
                    temp /= Prime[j];
                }
            }
            if(temp > 1){
                --cnt2[temp];
                ++cnt1[temp];
            }
            if(check()){
                return i;
            }
        }
        return -1;
    }
};

总结:
题目意思转换一下, 变为分割的前半部分和后半部分分解为质因数后没有相同的质因数, 数据范围小于1e6, 质数筛筛到1e3即可, 因为每个数最多只会有一个大于1000的质因数, 大于1000的质因数在分解质因数是放入Prime数组.接下来模拟即可.
感觉写的不好

4. 获得分数的方法数

class Solution {
public:
    
    const int mod = 1e9+7;
    int dp[60][1010];
    int waysToReachTarget(int target, vector<vector<int>>& types) {
        
        int len = types.size();
        dp[0][0] = 1;
        for(int i=1;i<=len;++i){
            for(int l=target;l>=0;--l){
                dp[i][l] = dp[i-1][l];
            }
            int count = types[i-1][0], marks = types[i-1][1];
            for(int j=count;j>=1;--j){
                for(int l=target;l>=j*marks;--l){
                    dp[i][l] += dp[i-1][l-j*marks];
                    dp[i][l] %= mod;
                }
            }
        }
        return dp[len][target];
    }
};

总结:
一个比较裸的多重背包
感觉写的不好

标签:cnt,return,int,题解,力扣,补题,maxpos,root,dp
From: https://www.cnblogs.com/-cen/p/17180244.html

相关文章

  • [ABC274E] Booster 题解
    [ABC274E]BoosterSolution目录[ABC274E]BoosterSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面在经典的TSP问题基础上存在初始......
  • 力扣-101. 对称二叉树
    题目大意给定一颗二叉树,判断是否对称解题思路将其中一个子树镜像翻转,再判断左右子树相不相等即可。镜像翻转示意图如下:code/***Definitionforabinarytreenod......
  • 题解:【ABC292F】 Regular Triangle Inside a Rectangle
    题目链接不妨设\(a\leb\)。显然当三角形三个点都在矩形边上的时候可以得到答案。通过手玩我们可以发现,当正方形推广到矩形的过程中,我们将一边拉长,三角形就可以不断往......
  • 题解 CF1406D【Three Sequences】
    看错题了,我很生气。problemYouaregivenasequenceof$n$integers$a_1,a_2,\ldots,a_n$.Youhavetoconstructtwosequencesofintegers$b$and$c......
  • LeetCode 29. Divide Two Integers 题解教程 All In One
    LeetCode29.DivideTwoIntegers题解教程AllInOnehttps://leetcode.com/problems/divide-two-integers/description///functiondivide(dividend:number,divis......
  • AGC051E[Middle Point] 题解
    条件转化我们记:\[M=\{x|x=\frac{a}{2^b},a,b\in\mathbb{Z}\}\\M^*=\{x|x\inM,x\ge0\}\]令下文向量均为二维向量,记给定点集为\({\vec{p_n}}\)那么原题即为求满足\(......
  • Java Swing项目使用Idea UI Designer设计插件无法启动问题解决方案
    起因最近整理一下以前写的swing项目,结果发现跑不起来了,具体表现为与视图表绑定的Java类的各属性为NULL(插件没有初始化绑定的类对象),导致项目无法启动。(报空指针异常)问题排......
  • CF1789D Serval and Shift-Shift-Shift 题解
    题目链接题目分析首先,看到题目中的左移右移之后再异或,我们自然可以想到在移动的过程中字符串的一段前缀和后缀不会改变,考虑通过这个性质逐位还原。因为异或0不会改变......
  • 题解 P3455 [POI2007]ZAP-Queries
    题目link是莫比乌斯函数还是莫比乌斯反演捏?感觉好多所谓“莫比乌斯反演”题只要拿\(\mu\)性质给暴力替换一下就能做出来了,比如这题qwq答案是这个式子:\(\sum\limits_{......
  • 萌新也能看懂的 Golang 题解(一)
    写在前面关于“模拟题”和“算法题”及主观难度评价第一批1791.设备编号(模拟)1792.服务器集群网络延时(排序、数学)1793.给定差值的组合(哈希表)1787.最长元音子串(模......