首页 > 其他分享 >从CF1819A学习mex相关问题及assert调试宏

从CF1819A学习mex相关问题及assert调试宏

时间:2024-01-25 09:23:44浏览次数:36  
标签:return int long leftOcc assert CF1819A end mex

Problem - 1819A - Codeforces

快速计算mex

int calcMex(vector<int> v) {
	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end())
	int n = int(v.size());
    for (int i = 0; i < n; ++i) if (v[i] != i) return i;
    return n;
}

<cassert> 调试宏

assert(条件表达式)

为真值,继续执行。非真值,终端报错。

\(std\)

//  Nikita Golikov, 2023

#include <bits/stdc++.h>

using namespace std;

using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;

template <class A, class B>
bool smin(A &x, B &&y)
{
    if (y < x)
    {
        x = y;
        return true;
    }
    return false;
}

template <class A, class B>
bool smax(A &x, B &&y)
{
    if (x < y)
    {
        x = y;
        return true;
    }
    return false;
}

template <class T>
int calcMex(vector<T> v)
{
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    int n = int(v.size());
    for (int i = 0; i < n; ++i)
        if (v[i] != i)
            return i;
    return n;
}

bool solveTest()
{
    int n;
    cin >> n;
    vector<int> a(n);
    map<int, int> leftOcc, rightOcc;
    for (int i = 0; i < n; ++i)
    {
        cin >> a[i];
        rightOcc[a[i]] = i;
        if (!leftOcc.count(a[i]))
            leftOcc[a[i]] = i;
    }
    int mex = calcMex(a);
    if (leftOcc.count(mex + 1))
    {
        int L = leftOcc[mex + 1], R = rightOcc[mex + 1];
        for (int i = L; i <= R; ++i)
        {
            a[i] = mex;
        }
        int mx = calcMex(a);
        assert(mx <= mex + 1);
        return mx == mex + 1;
    }
    for (int i = 0; i < n; ++i)
    {
        assert(a[i] != mex);
        if (a[i] > mex || (leftOcc[a[i]] != rightOcc[a[i]]))
        {
            return true;
        }
    }
    return false;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        cout << (solveTest() ? "Yes" : "No") << '\n';
    }
    return 0;
}
  • 遇到 mex 的题目,一定要利用 mex 的特性。
  • 比如这题,原数组的 mex 肯定是原数组中未出现的,而且 mex + 1 是可以继承于原数组(只要再加入 mex 并且确保没有 mex + 1 即可)

标签:return,int,long,leftOcc,assert,CF1819A,end,mex
From: https://www.cnblogs.com/kdlyh/p/17986308

相关文章

  • ARC170C Prefix Mex Sequence
    题意简述有长度为\(n\)的\(s_i=0/1\),求满足下列条件的长度为\(n\)的序列\(a\)的个数,对\(998244353\)取模:\(\foralli,0\lea_i\lem\)当\(s_i=0\)时,\(a_i\not=\operatorname{mex}(a_1,a_2,\cdots,a_{i-1})\)当\(s_i=1\)时,\(a_i=\operatorname{mex}(a_1,a_2,\......
  • unittest,assert断言失败,用例结果返回的是成功原因,及解决方式
    在使用unittest做接口测试时,会发现assert断言失败了,但是测试报告的结果是成功的,这种情况是什么原因呢?原来是因为在写测试用例的时候,为了测试用例失败以后下面的用例可以继续执行而不受到影响,就使用了try...except...进行处理,当断言失败时,报错信息由except处理。所以,在测试结果及......
  • Petrozavodsk Summer 2019. Day 9. MEX Foundation Contest【杂题】
    比赛链接A.TheOnePolynomialMan给定模数\(p\)和\(0\simp-1\)的两个集合\(U,V\),求有多少个有序对\((a,b)\)满足:\(f(a,b)=\prod\limits_{z\inV}\left(\frac{(2a+3b)^2+5a^2}{(3a+b)^2}+\frac{(2a+5b)^2+3b^2}{(3a+2b)^2}-z\right)\equiv0\pmo......
  • wasmex webassenbly elixir 运行时
    wasmex是基于wasmtime以及rustnif开发的方便elixir运行webassembly的框架与rust的集成与rust集成使用的三方包 与mjml工具类似使用了rustler_precompiled以及rustlerrust使用的三方包 前边也说了是基于了wasmtime包装的,同时使用了wasmtimewasi一些子模块说明rustle......
  • CF1527D MEX Tree 题解
    思路如果一条路径的\(\text{mex}=k\),那么\(0\simk-1\)这些点一定在路径中出现过,并且一定在一条链上。如果不在一条链上,那么就不满足简单路径这一条件了。因此我们在从小到大加点的过程中如果发现一个点不在已求出的链上,那么比这个点编号大的\(k\)答案一定都是\(0\)了......
  • DOMException - play() 请求中断
    DOMException- play()请求中断bookmark_border  FrançoisBeaufortGitHub 您刚才在Chrome开发者工具JavaScript控制台中发现了这个意外的媒体错误吗?注意 :未捕获(承诺中)DOMException:play()请求因调用pause()而中断。或注意:未捕获(在承诺中)DOMExceptio......
  • CF817F MEX Queries
    题意一个集合,初始为空。请你维护以下\(3\)种操作。把\([l,r]\)中在集合中没有出现过的数添加到集合中。把\([l,r]\)中在集合中出现过的数从集合中删掉。把\([l,r]\)中在集合中没有出现过的数添加到集合中,并把\([l,r]\)中在集合中出现过的数从集合中删掉。每......
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis
    Requestprocessingfailed;nestedexceptionisorg.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.BindingException:Parameter'keyWord'notfound.Availableparametersare[keyword,param1] 错误原因:我在mapper里加......
  • D. Cyclic MEX
    D.CyclicMEXForanarray$a$,defineitscostas$\sum_{i=1}^{n}\operatorname{mex}^\dagger([a_1,a_2,\ldots,a_i])$.Youaregivenapermutation$^\ddagger$$p$oftheset$\{0,1,2,\ldots,n-1\}$.Findthemaximumcostacrossallcyclicshiftsof......
  • 【转载】SpringBoot2.x使用Assert校验(非单元测试)
    参考https://blog.csdn.net/yangshangwei/article/details/123105926环境环境版本操作windows10JDK11Springboot2.3.12.RELEASE注意引入的包为importorg.springframework.util.Assert;介绍对象和类型断言函数说明notNull()假设对......