首页 > 其他分享 >『模拟赛』多校A层冲刺NOIP2024模拟赛12

『模拟赛』多校A层冲刺NOIP2024模拟赛12

时间:2024-10-24 16:58:16浏览次数:1  
标签:rt ch return int 12 模拟 ans NOIP2024 define

Rank

挂了不少,还行

image

A. Alice 和璀璨花

签。

一眼最长上升子序列,昨天在 AT 专题里刚见过,不过赛时没想到离散化之后树状数组,所以打的动态开点,结果细节挂了 30pts。

和最长上升子序列思路基本一致,直接区间查询 \([1,a_i-1]\) 的最大值,然后在 \(a_i\times b_{f_i}\) 插入 \(f_i\) 即可,时间空间都是 \(\mathcal{O(n\log n)}\) 的。

常数略大,稍微卡卡就过去了。几个卡常 trick:动态开点加取地址符会快很多;没事把函数都加上 inline;剪枝尽量;快读 + printf + puts;空间开够;不要 #define int long long

点击查看代码
// ubsan: undefined
// accoders
#include<bits/stdc++.h>
#define fo(x, y, z) for(register int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(register int (x) = (y); (x) >= (z); (x)--)
typedef long long ll;
using namespace std;
#define lx ll
inline lx qr()
{
    char ch = getchar(); lx x = 0, f = 1;
    for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
    for(; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
    return x * f;
}
#undef lx
#define qr qr()
#define pll pair<ll, ll>
#define fi first
#define se second
#define M_P(x, y) make_pair(x, y)
const int Ratio = 0;
const int N = 1e6 + 5;
int n, b[N], f[N], ans, cnt = 1;
ll a[N], maxx, MA;
int t[N * 20], son[N * 20][2];
namespace Wisadel
{
    #define ls son[rt][0]
    #define rs son[rt][1]
    #define mid ((l + r) >> 1)
    inline void Wpushup(int rt)
    {
        t[rt] = max(t[ls], t[rs]);
    }
    inline void Wadd(int &rt, ll l, ll r, ll x, int k)
    {
        if(!rt)rt=++cnt;
        if(l == r){t[rt] = max(t[rt], k); return ;}// !
        if(x <= mid)
        {
            Wadd(ls, l, mid, x, k);
        }
        else
        {
            Wadd(rs, mid + 1, r, x, k);
        }
        Wpushup(rt);
    }
    inline int Wq(int rt, ll l, ll r, ll x, ll y)
    {
        if(!rt) return 0;
        if(x <= l && r <= y) return t[rt];
        int ans = 0;
        if(x <= mid) ans = Wq(ls, l, mid, x, y);
        if(y > mid) ans = max(ans, Wq(rs, mid + 1, r, x, y));
        return ans;
    }
    short main()
    {
        freopen("alice.in", "r", stdin), freopen("alice.out", "w", stdout);
        n = qr;
        fo(i, 1, n) a[i] = qr, MA = max(MA, a[i]);
        fo(i, 1, n) b[i] = qr, maxx = max(maxx, MA * b[i]);
        int rot = 1;
        fo(i, 1, n)
        {
            f[i] = Wq(1, 1, maxx, 1, a[i] - 1) + 1;
            Wadd(rot, 1, maxx, 1ll * a[i] * b[f[i]], f[i]);
            ans = max(ans, f[i]);
        }
        printf("%d\n", ans);
        return Ratio;
    }
}
signed main(){return Wisadel::main();}

B. Bob 与幸运日

解同余方程 + 分讨,挺 ex 的。

暴力直接跑,不过要注意 \(a,b=w\) 的情况,直接开局取模即可,挂了 10pts。

正解仙姑,估计需要复习板子。

C. Charlie 的运输网

有点复杂的树上问题。

暴力就是每次 \(\mathcal{O(n)}\) 跑一遍图,如果跑到了已经跑过的点就看是否符合 \(dis_v\equiv dis_u+1\pmod 2\),不符合直接 return 即可,复杂度 \(\mathcal{O(nq)}\),有 25pts。

正解仙姑。

D. David 与和谐号

迭代加深搜索。

首先一个上界 \(2n-2\) 是通过对 \(2\) ~ \(n\) 做了共 \(n-1\) 次先换到 1 再换到本身位置的操作得来的。然后因为步数少,可以用迭代加深搜索做。所谓迭代加深搜索,其实就是规定了搜索的深度不超过某个钦定的值,相当于做了很大的剪枝。这样还不足以通过本题。我们发现每次翻转只会改变一对相邻数对,因此对于每个状态求出值不连续的相邻数对的数量,剩余步数一定大于这个值,然后就能过了。稍微卡卡常能跑的飞快。

image

点击查看代码(41ms)
#include<bits/stdc++.h>
#define fo(x, y, z) for(register int (x) = (y); (x) <= (z); (x)++)
#define fu(x, y, z) for(register int (x) = (y); (x) >= (z); (x)--)
typedef long long ll;
using namespace std;
#define lx ll
inline lx qr()
{
    char ch = getchar(); lx x = 0, f = 1;
    for(; ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
    for(; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
    return x * f;
}
#undef lx
#define qr qr()
#define pll pair<ll, ll>
#define fi first
#define se second
#define M_P(x, y) make_pair(x, y)
const int Ratio = 0;
const int N = 30 + 5;
int n, ans;
int a[N];
namespace Wisadel
{
    inline int Wq()
    {
        int res = 0;
        fo(i, 1, n) res += (abs(a[i] - a[i + 1]) != 1);
        return res;
    }
    inline bool Wdo(int res)
    {
        int zc = Wq();
        if(res + zc > ans) return 0;
        if(res == ans) return !zc;
        fo(i, 2, n)
        {
            reverse(a + 1, a + 1 + i);
            if(Wdo(res + 1)) return 1;
            reverse(a + 1, a + 1 + i);
        }
        return 0;
    }
    short main()
    {
        freopen("david.in", "r", stdin), freopen("david.out", "w", stdout);
        int T = qr;
        while(T--)
        {
            n = qr, ans = 0;
            fo(i, 1, n) a[i] = qr;
            a[n + 1] = n + 1;
            while(!Wdo(0)) ans++;
            printf("%d\n", ans);
        }
        return Ratio;
    }
}
signed main(){return Wisadel::main();}

CSP 前最后一场模拟赛,紧张是肯定的,有些地方明显失常了。

T1 想剪枝想假了,发现赛时的做法会漏掉某个区间内的值,其实还是没手动算最坏的时空复杂度,每次最多加 \(\log n\) 个点,所以单点修改到底就行。T2 忘了怎么解同余方程(其实就没想到要解),暴力还挂了。T3 T4 感觉暴力也没打完,还能拿更多的分。但其实加上 T1 T2 挂的就能 Rank1 了,有点可惜。好在不是正式比赛,一切都还有机会。

考前心态最重要,没准这挂的 40pts 就在之后的某次更重要的比赛上复活了。

加油,我的第一次,也是最后一次。


完结撒花~

image

标签:rt,ch,return,int,12,模拟,ans,NOIP2024,define
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18499960

相关文章

  • CSP模拟赛 #44
    2024最后一场CSP模拟赛。A给定\(x,k\),求最小的\(y\)满足\(y\gex\)且除了\(k\)个数位,其他数位均相同。\(1\len\le10^{17},\0\lek\le1\)暴力枚举。B给定\(n\)个三元组\((a_1,b_1,c_1),\dots(a_n,b_n,c_n)\),每个数\(\in[0,9]\)。求有多少种排列三元......
  • 2024/10/24 模拟赛总结
    \(100+60+60+40=260\),这种信心赛没AK我真的要退役了#A.长方体喜欢写线段树和ST表的小朋友们你们好呀,我是前后缀\(\min/\max\)奥特曼对于\(n\)个长方体的交,显然就是最靠右的左面、最靠左的右面、最靠上的下面……组成的长方体枚举一个不存在的长方体接下来考虑容斥,对......
  • 使用Selenium时,如何模拟正常用户行为?
    Selenium作为自动化测试和网页数据抓取的利器,被广泛应用于自动化网页交互、爬虫开发等领域。然而,随着网站反爬虫技术的不断升级,简单的自动化脚本很容易被识别和阻止。因此,模拟正常用户行为,降低被检测的风险,成为Selenium使用者必须掌握的技能。本文将详细介绍如何使用Seleni......
  • mysql 1206 - The total number of locks exceeds the lock table size
    由于数据量过大导致报错:Thetotalnumberoflocksexceedsthelocktablesize解决方法:输入查询:showvariableslike"%_buffer%";找到对应的 innodb_buffer_pool_size 默认值是8388608  8兆将这个数值设置的大一点,比如1G1G=1024*1024*1024=1073741824 setGLOB......
  • 基于RFC3394标准的AES-128-ECB模式的密钥封装(Key Wrap)和解封(Key Unwrap)
    密钥封装(KeyWrap):RFC3394默认IV为0xA6,0xA6,0xA6,0xA6,0xA6,0xA6,0xA6,0xA6。使用AES_Encrypt函数对IV和密钥数据块进行加密,并将结果与步数异或。经过6n轮迭代后,将最终的IV和加密后的数据块复制到输出的密文中。密钥解封(KeyUnwrap):从输入的密文中提取了IV和加密的......
  • 使用OpenSSl库实现AES-GCM-128算法(C语言)
    在C语言中使用OpenSSL库实现AES-GCM-128算法,并生成GMAC(GaloisMessageAuthenticationCode)消息认证码,通过以下步骤完成:初始化加密环境:创建一个EVP_CIPHER_CTX结构体,用于存储加密过程中的所有必要信息。设置加密算法:指定使用AES-GCM模式,以及密钥和IV(初始化向量)。处理附加认证......
  • PFC离散元数值模拟仿真技术与应用
    随着计算能力的提高和算法的优化,离散元仿真技术得到了快速发展,并在学术界产生了大量研究成果。在PFC离散元计算中无需给定材料的宏观本构关系和对应的参数,这些传统的参数和力学特性在程序中可以自动得到。据调查,运用PFC离散元仿真技术工具近几年发表的论文主要集中在以下几个方......
  • 【10-24模拟赛T1】Alice 和璀璨花
    著名的植物学家Alice经过多年的探索,终于找到了传说中的璀璨花。璀璨花的生长速度非常迅猛,如果不加以合适的控制,璀璨花会因为过度内耗而死亡。璀璨花的生长趋势可以用序列\(a\)表示,Alice在研读前人对璀璨花的研究后总结出了一个控制序列\(b\)。Alice需要让璀璨花的生长趋势......
  • 2024.10.24 1234版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 2024/10/23 模拟赛总结
    赛时情况以下是赛时写的。14:10好像当\(n\lem\)时的答案是\(2^n\)。14:20当\(m=2\)时,答案的差值是一个等差数列。答案为\(\dfrac{n(n+1)}{2}+1\)。小样例:\(n=4,m=3\)答案为\(15\)。14:50T1不会啊,润。发现如果你会惹老师生气,干脆直接不写。所以变成了选若干科......