首页 > 其他分享 >Day 3

Day 3

时间:2023-10-01 22:11:06浏览次数:24  
标签:ch int mex res2 集合 Day dp

Day 3

T1

考试思路就是拿出来最大的 \(mex\) 记为 \(Max\)

然后拿出来产生此 \(mex\) 的集合

剩下的数里面还能再拿出来一个目前最大的 \(mex\)

然后从 \(0 - mex\) 中枚举,看哪个和前面的 \(Max\) 异或出来最大

继续删掉产生此 \(mex\) 的集合,然后重复即可

数据比较水,无需重复就能过,重复三十次可基本挡掉 \(hack\)

代码:

#include <bits/stdc++.h>
#define ll long long
#define gt getchar
#define pt putchar
using namespace std;
inline ll read(){
    ll x=0,f=1;char ch=gt();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=gt();}
    return x*f;}
inline void print(ll x){if(x<0)pt('-'),x=-x;if(x>9)print(x/10);pt(x%10+48);}
void file(){freopen("mexor.in", "r", stdin);freopen("mexor.out", "w", stdout);}
const int maxn = 1000006;
int n, a[maxn], cnt[maxn];
int ans = 0, res1;
void work(int tim)//重复消减
{
    if(tim == 0)return ;
    int res2 = 0;
    while(cnt[res2])
    {
        ans = max(ans ,res1 ^ (1 + res2));
        ++ res2;
    }//找到那个消减后与最初的异或最大值
    for(int i = 0; i <= (res1 ^ ans) - 1; ++ i)-- cnt[i];
    res1 = ans;
    work(-- tim);
}
int main()
{
    //file();
    n = read();
    for(int i = 1; i <= n; ++ i)
        a[i] = read(), ++ cnt[a[i]];
    res1 = 0;
    while(cnt[res1]) -- cnt[res1], ++ res1;//找最初的Mex
    ans = res1;
    work(30);
    cout << ans << '\n';
    return 0;
}



插个字防止vscode又卡bug

T2

赛时冲了一坤时导致后面T3没打暴力,爆了

“你最大的希望或许是你最大的羁绊”

赛时写的 \(60pts\) 的链,但是读错题了,给他完全转化成了一个序列问题,而实际上是子树。

所以对于每一个被匹配上的黑子,一定是由他的父亲白子匹配而来

白子深度固定,最小化到黑子深度之和:

  • 从小到大枚举黑子,找未匹配的最深白子,并查集实现

T3

T2冲了俩个半点,T3没时间拿 \(Dij\) 暴力

题解没看懂

T4

赛时看了一眼溜了

正解 dp:

$ dp_{i, j, S}$ 表示走 \(S\) 部分,\(i\) 进 \(j\) 出,路径最小值

\[dp_{i, j, S} = min_{x, y}(dp_{i, x, S'} + dp_{y, j, S''} + dis_{x, y}) \]

\(O(n^4)\)

优化, 固定 \(x\)

\[dp_{x, j, S''} = dp_{y, j, S''} + dis_{x, y} \]

再改一个 \(dp\) 状态, \(S\) 这个集合中,走这个集合前最后一个点为 \(i\) ,从这个集合的 \(j\) 中出来

转移方程:

\[dp_{i, j, S} = min_{x, y}(dp_{i, x, S'} + dp_{x, j, S''}) \]

剩下待补

标签:ch,int,mex,res2,集合,Day,dp
From: https://www.cnblogs.com/qinzh/p/17739357.html

相关文章

  • Day2
    Day2T1赛时想的爆了,只能去拿40pts暴力正解是统计质因子个数,然后二分答案判断每个质因子能否满足但是可以只判2的个数,或者为了确保其不背卡常使用数十个质数即可。#include<bits/stdc++.h>#definelllonglong#definegtgetchar#defineptputcharusingnamespacestd......
  • P7167 [eJOI2020 Day1] Fountain 题解
    Description给定\(n\)个从上往下圆心重叠的圆盘,给定每个圆盘的直径\(d_i\)和容量\(c_i\),所有圆盘底下有一个容量为\(\infty\)的水池,编号为\(0\)。\(q\)次询问,每次给定\(r\)和\(v\)表示往第\(r\)个圆盘里倒\(v\)的水,输出水最后流到哪个圆盘会停止。Solution倍......
  • 【日常收支账本】【Day03】通过ElementTree+XPath实现对XML文件的读写
    一、项目地址https://github.com/LinFeng-BingYi/DailyAccountBook二、新增1.解析xml文件1.1功能详述解析所设计的xml文件格式,并将所得数据存入变量。点击查看xml格式<DailyAccountBook><balance><fund><value>5000.00</value>......
  • 2023牛客国庆集训派对day1
    2023牛客国庆集训派对day1F.InfiniteStringComparision解题思路:\(n=a.size,m=b.size\)短的字符串不断延长,直到覆盖两倍的长串。然后按两倍长串的长度一一比较即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;typedefpair<int,int>......
  • python_day1
    Python0基础操作0.0快捷键ctrl+d复制当前行代码shift+alt+上\下将当前行代码上移或下移ctrl+f搜索0.1字面量0.1.0注释#开头(单行注释)(一般用于对单行代码进行注释)'''多行注释(一般用于对程序文件进行解释)'''0.1.1变量变量值可以记录数据,重复使用0.1.......
  • 加训日记 Day7——练题捏
    Day7,9.27  ·平凡的一天(指早上呼呼大睡)  ·今天挤时间把算法基础课看完了,时间拉的有点长  ·该开始一点一点写题了......
  • 加训日记 Day8——关于cf一道题调了半天这件事
    Day8,9.28  ·国庆假期前狠狠刷cf  ·把之前比赛的题目基本上都补了(牛客的没来得及补)  ·这一个星期日均四道题,确实挺不错的  ·思维还是跟不上捏......
  • 加训日记 Day5——codeforces round 899 再战div2
    Day5,9.25,codeforcesround899div2  ·事实证明自己的思维和手速都还不够快,晚上还晚来了一点  ·B题属实是,上来就想着并查集(菜鸡是这样的)然后发现不会写捏  ·思考了很久(看数据量)感觉是枚举暴力,但是又想不到怎么去枚举  ·一题遗憾离场  ·顺理成章的-26......
  • 加训日记 Day6——来场div3上上分(为什么连着三天比赛啊喂,人要熬死了)
    Day6,9.26cfround900div3  ·前三题手速题,尝试用模板和库函数结果出了点岔子,罚时略高  ·感觉还有很大提升空间,觉得这种题应该要求自己10分钟内全过掉(开翻译的情况下)  ·D过的人数没有E多就很难绷  ·写了发D结果TLEon10,心态爆炸直接下播  ·美美+46......
  • 加训日记 Day3——atcoder ABC321乐子场
    Day3,9.23  ·打了场acwing周赛,第三题差点就想出来了,想歪到组合数上乱选了呜呜呜  ·ABC321场写的太抽象了,A题上来wa两次,B题少考虑情况乱wa  ·C题更是重量级,想不出来正确做法直接暴力,结果打表最后少写了几个数,纯纯犯病场  ·最后加了36分没绷住acwing周赛排名atcod......