首页 > 其他分享 >B. Modulo Sum

B. Modulo Sum

时间:2024-06-21 09:20:50浏览次数:14  
标签:set Modulo cur 容量 Sum 元素 sett 背包

https://codeforces.com/contest/577/problem/B

题意:给定长度为n个数组和一个m(1 <= n <= 1e6, 2 <= m <= 1e3),其中n中的元素(1 <= x <= 1e9)。问n中是否有子序列的和可以被m整除,输出YES或NO。

思路:维护一个集合,依此遍历数组元素,每次遍历将集合中的元素进行更新,更新过程中看是否有0出现即可。

总结:m范围为1e3,n的范围为1e6,考虑对n中的元素取模,使用背包暴力求解时间复杂度是1e6 * 1e3 = 1e9。但是背包的最大容量为1e3,在遍历每个元素的过程中进行了大量的重复和无用计算,我们只关心是否0容量会出现。 所以直接使用std::set来维护已经出现的元素,再利用背包的思想来更新集合中的元素即可。 关键点1是要对元素进行取模。 关键点2是要知道暴力dp的重复计算对于解是无用的,所以用set来降重,降重的原理是背包的容量不大,直接维护已经出现了的容量,就不再对没有出现的背包容量进行无效计算了。

void solve(){
    int n, m;
    cin >> n >> m;

    vector<int> a(n);
    for (auto& x : a){
        cin >> x;
        x %= m;
    }

    set<int> sett;
    for (const auto& x : a){
        set<int> cur;
        for (const auto& it : sett){
            cur.insert((it + x) % m);
        }
        sett.insert(cur.begin(), cur.end());
        sett.insert(x);
        if (sett.count(0)){
            cout << "YES\n";
            return;
        }
    }

    cout << "NO\n";
}

标签:set,Modulo,cur,容量,Sum,元素,sett,背包
From: https://www.cnblogs.com/yxcblogs/p/18259904

相关文章

  • 探索Semantic Kernel内置插件:深入了解ConversationSummaryPlugin的应用
    前言经过前几章的学习我们已经熟悉了SemanticKernel插件的概念,以及基于Prompts构造的SemanticPlugins和基于本地方法构建的NativePlugins。本章我们来讲解一下在SemanticKernel中内置的一些插件,让我们避免重复造轮子。内置插件SemanticKernel有非常多的预定义插件,作为......
  • 实现CHECKSUM的C语言程序
    什么是校验和?在计算中,校验和是使用算法从较大的数据集创建的小数据,目的是对较大的数据集所做的任何更改都会导致不同的校验和。校验和通常用于验证已传输或存储的数据的完整性,因为数据中的错误或修改可能会导致校验和更改。它们还可用于验证数据的真实性,因为校验和通常是使用......
  • D. Prefix Permutation Sums
    原题链接题解1.缺少一个前缀和,缺少在哪了?如果缺少在\(i<n\)的地方,则会出现一个两个数之和,即缺少两个数否则会只缺少一个数2.两个数之和可能大于\(n\),也可能不3.虽然\(a_i\)达到了\(1e18\)但是\(n\leq2e5\),所以可以用数组记录出现的数code#include<bits/stdc++.......
  • 209. Minimum Size Subarray Sum
    Givenanarrayofpositiveintegersnumsandapositiveintegertarget,returntheminimallengthofasubarraywhosesumisgreaterthanorequaltotarget.Ifthereisnosuchsubarray,return0instead.Example1:Input:target=7,nums=[2,3,1,2,......
  • 【LeetCode最详尽解答】15-三数之和 3sum
    欢迎收藏Star我的MachineLearningBlog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star,有问题可以随时与我交流,谢谢大家!链接:15-三数之和直觉示例:输入:nums=[-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[......
  • square869120Contest #3 G Sum of Fibonacci Sequence
    洛谷传送门AtCoder传送门特判\(n=1\)。将\(n,m\)都减\(1\),答案即为\[[x^m]\frac{1}{(1-x-x^2)(1-x)^n}\]若能把这个分式拆成\(\frac{A(x)}{(1-x)^n}+\frac{B(x)}{1-x-x^2}\)的形式,其中\(\degA(x)\len-1,\degB(x)\le1\),那么答案就是好算的。......
  • JDK8新特性【接口新特征、lambda语法、Supplier、Consumer、Function、Predicate】
    目录一、关于接口的新特性1.1jdk1.8之前的接口重要特性1.2JDK8以后代码演示1.3总结通过代码演示发现作用二、Lambda表达式[重点]2.1将匿名内部类写法改写为lambda写法2.2语法特点能够写成lambda形式的的前提语法特征代码演示深入理解lambda2.3总结三、函数......
  • ABC348E Minimize Sum of Distances 题解
    ABC348EMinimizeSumofDistances题目大意给定一棵共\(n\)个节点的树,第\(i\)个点的权重为\(c_i\)。定义\(f(x)\)表示树上所有点到节点\(x\)的距离乘上权重,即\(f(x)=\sum\limits_{i=1}^n(c_i\timesdis(x,i))\)。求\(\min\limits_{u=1}^nf(u)\)。Solve一眼换根......
  • ABC 321 F #(subset sum = K) with Add and Erase
    题意有一个箱子,每次可以向里面添加或者拿走一个数,问每次操作过后,任选箱子里的数相加,总和等于k的方案数是多少。思路萌新算是学到新东西了,这其实是个可撤销背包的板题。我们先考虑一个问题:对于普通计数类dp,我们现在禁用某一个数i,我们现在想知道某一个数j有多少种方式表示(即dp......
  • 1. Two Sum Go实现
    在数组中找到2个数之和等于给定值的数字,结果返回2个数字在数组中的下标。1.解法1时间复杂度O(n^2)直接两次遍历所有节点,进行求和比较代码如下:functwoSum(nums[]int,targetint)[]int{ res:=make([]int,2,2) fori:=0;i<len(nums);i++{ forj:=i+1;j<len......