首页 > 其他分享 >『模拟赛』暑假集训CSP提高模拟8

『模拟赛』暑假集训CSP提高模拟8

时间:2024-07-26 18:20:49浏览次数:8  
标签:rt qr return int 集训 fx ch CSP 模拟

Rank

诶 好像把7咕了,那就咕吧。

膜拜博弈论带我上 Rank1。
image


A. 基础的生成函数练习题(gf)

原[ABC093C] Same Integers

先给 \(a\),\(b\),\(c\) 按升序排个序,求出相邻两数之差。

若较小的两数之差(\(a\) 和 \(b\))为奇数,先操作 \(\lfloor{\frac{b-a}{2}}\rfloor\) 次使 \(a=b-1\),再操作 \(c-b\) 次使 \(a=c-1\),\(b=c\),再操作两次让 \(a+=2\),\(b,c+=1\)即可,共需要 \(\lfloor{\frac{b-a}{2}}\rfloor+(c-b)+2\) 次操作。

若差为偶数,先操作 \(\frac{b-a}{2}\) 次使 \(a=b\),再操作 \(c-b\) 次使 \(a=b=c\) 即可,共需要 \(\frac{b-a}{2}+(c-b)\) 次操作。

太简单,不放码了。

B. 简单的拉格朗日反演练习题(lagrange)

原[CF1706E] Qpwoeirut and Vertices

恼了,只打出 \(20pts\) 暴力,看我狂补最小生成树。

但正解可以不用最小生成树。我继续了上午并查集的思想,发现维护好的话是可行的。

首先,题目可以翻译成:按给出的顺序,最少在图中连几条边之后满足 \(\left[l,r\right]\) 内所有点都在同一联通块内。

设 \(min_i\) 为最少加了多少边之后满足 \(i\) 与 \(i+1\) 在同一连通块内。这样的话答案就转化成了求 \(\max_{i=l}^{r-1} min_i\) 的值。

求 \(min_i\) 的值时考虑用启发式合并,判断给出边的两个端点是否在同一连通块内,若否则将小的联通块合并到大的上,按顺序求出每个点的 \(min_i\) 值。

查询方面,已经确定了是区间找最大值,那么直接献出我最爱的线段树。

复杂度不知道是多少,大概在 \(\mathcal{O(nlogn)}\) 左右,请大佬们指正。

点击查看代码
#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)--)
using namespace std;
typedef long long ll;
#define lx int
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()
const int Ratio=0;
const int N=2e5+5;
int n,m,q;
int fx[N];
int tre[N<<2],minn[N];
int siz[N];
vector<int>G[N];
namespace Wisadel
{
    int Wfind(int x)
    {
        if(fx[x]==x) return x;
        return fx[x]=Wfind(fx[x]);
    }
    #define ls (rt<<1)
    #define rs (rt<<1|1)
    #define mid ((l+r)>>1)
    void Wpushup(int rt)
    {
        tre[rt]=max(tre[ls],tre[rs]);
    }
    void Wbuild(int rt,int l,int r)
    {
        if(l==r)
        {
            tre[rt]=minn[l];
            return;
        }
        Wbuild(ls,l,mid),Wbuild(rs,mid+1,r);
        Wpushup(rt);
    }
    int Wq(int rt,int l,int r,int x,int y)
    {
        if(x>y) return 0;
        if(x<=l&&r<=y) return tre[rt];
        int res=0;
        if(x<=mid) res=max(res,Wq(ls,l,mid,x,y));
        if(y>mid) res=max(res,Wq(rs,mid+1,r,x,y));
        return res;
    }
    short main()
    {
        n=qr,m=qr,q=qr;
        fo(i,1,n) G[i].clear(),G[i].push_back(i),fx[i]=i,siz[i]=1,minn[i]=1e9;
        fx[n+1]=n+1;
        fo(i,1,m)
        {
            int a=qr,b=qr;
            a=Wfind(a),b=Wfind(b);
            if(a==b) continue;
            if(siz[a]>siz[b]) swap(a,b);
            siz[b]+=siz[a];fx[a]=b;
            for(int j=0;j<G[a].size();j++)
            {
                int v=G[a][j];
                if(Wfind(v)==Wfind(v+1)) minn[v]=min(i,minn[v]);
                if(Wfind(v)==Wfind(v-1)) minn[v-1]=min(i,minn[v-1]);
                G[b].push_back(v);
            }
            G[a].clear();
            siz[a]=0;
        }
        Wbuild(1,1,n-1);
        while(q--)
        {
            int a=qr,b=qr;
            printf("%d\n",Wq(1,1,n-1,a,b-1));
        }
        return Ratio;
    }
}
int main(){return Wisadel::main();}

对了,还有一个疑问,这样改有什么必要性吗。

C. 容易的多元拉格朗日反演练习题(multi)

原[AGC056D] Subset Sum Game

没想到是黑啊。

直接挂我中午写的题解了。

D. 朴素的抽象代数题(algebra)

一点也不朴素好吧,题目还没搞清楚,%%% HDK 赛时打出 25pts 暴力。


挂个抽象玩意。

点击查看高级背景

image

image

image

image

题面高级,但感觉不如 Delov 主题的。

完结撒花~

标签:rt,qr,return,int,集训,fx,ch,CSP,模拟
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18325980

相关文章

  • 20240726【省选】模拟
    破防了,什么SCOI2024Day1翻版,一道题可能拿100pts,一道题大多数人拿10pts,还有一道不可做,队线110/lhT1去他妈的煞笔构史题解,说了跟说了一样。这个是真的不会。容易想到对二进制每一位开一颗权值线段树或者别的啥维护,然后我就不会了……考虑将每颗权值线段树对应处理的区间......
  • 20240726模拟赛订正题笔记
    (T1)lnsyoj2212刷数组考场上切掉了,所以来说说考场上的做法。首先看数据范围,线段树并不能拿满分,所以考虑在数组上操作。如何处理区间覆盖:记录一下区间覆盖的数,然后记录第几次覆盖,单点修改或增加时查看次数被覆盖了几次,若与正常覆盖次数不符,则将此数设为新的覆盖数。考场代码如下......
  • Unity 模拟足球网的物理效果
    以下是模拟出足球网的效果,花光了好多细胞写出来的,满满的干货只需要把脚本挂载在足球网对象身上即可,代码比较通用,可以用在其他网格也可以的,只需要调节参数即可,主页也写了足球发射的脚本,搭配这个足球网的效果,可以模拟出足球踢进网时的物理效果usingUnityEngine;usingSystem......
  • 暑假集训CSP提高模拟8
    暑假集训CSP提高模拟8\(T1\)P155.基础的生成函数练习题(gf)\(100pts\)原题:[ABC093C]SameIntegers设通过操作\(a,b,c\)所能达到的最小整数为\(x\)。观察到对同两个数进行操作\(2\)等价于分别对这两个数各进行操作\(1\),在\(a,b,c\)达到\(x\)的过程中优先......
  • 模拟算法概览
    前言LeetCode上的模拟算法题目主要考察通过直接模拟问题的实际操作和过程来解决问题。这类题目通常不需要高级的数据结构或复杂的算法,而是通过仔细的逻辑和清晰的步骤逐步解决。适合解决的问题模拟算法适合用来解决那些逻辑明确、步骤清晰且可以逐步执行的问题。这类题型通......
  • Ryujinx(Switch模拟器) v1.1.1361 汉化版
    Ryujinx是一款免费、开源的NintendoSwitch模拟器,它可以在电脑上模拟NintendoSwitch游戏机的运行环境,让玩家们能够在PC上畅玩Switch游戏。Ryujinx支持大部分NintendoSwitch游戏,包括TheLegendofZelda:BreathoftheWild、SuperMarioOdyssey等知名游戏,而且还......
  • 【题解】「CSP模拟赛」雨天 rain
    雨天rain考场上打了一个动态开点线段树,但是被卡空间了......
  • 基于GD32的矩阵按键usb-hid设备,详细教程,完全模拟的电脑数字键盘的所有功能,包括长按、
    本文采用的是基于GD32F350的一个4×5的矩阵键盘键盘板。矩阵键盘的电路原理图大致如下,由四个列引脚和五个行引脚来检测判断按键的按下。本文四个列引脚分别是PA15PB8PB9PC13,五个行引脚分别是PB10PB11PB12PB13PB14。typedefstruct{uint32_tGPIO_Group;......
  • VP CSP-J2019 江西
    不是很理解为什么江西CSP单列一年,题目难度吊打CSP-J2024T1P5681[CSP-J2019江西]面积签到题,但需要注意面积相等情况#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;lla,b,c;intmain(){ cin>>a>>b>>c; if(a*a>b*c){ cout<<"Alice......
  • 暑假集训CSP提高模拟7
    这个T1的\(n^{3}\)的SPJ效率还是太慢了,膜拜SPJ大神学长,还会画画A.Permutations&Primes这题感觉挺水的但是感觉有不是那么水,主要还是因为我赛时没想出正解,在打的表里找了一组好看的规律,打上了然后就过了.对偶数来说,我的规律正好是正解的特化,但是对奇数来说,我的规律就......