首页 > 其他分享 >CSP 模拟 49

CSP 模拟 49

时间:2024-10-17 19:00:51浏览次数:7  
标签:std return 49 int res mid inline CSP 模拟

A 传送 (teleport)

暴力连边一定不行,寻找最优的连边。先说下我的连法,手玩一下发现,如果对横坐标排序,点 \(u\) 只连下一个横坐标中与它纵坐标最近的即可,这样对于下一个横坐标的点,\(u\) 的连法都是最优的,纵坐标同理。
题解连法也一样,考虑本质就是在一维上走,所以两维排序后都连一下就行。赛时一开始就推了横坐标,发现假了被硬控一小时。

B 排列 (permutation)

只跟 \(k\) 的倍数有关,设 \(f_{i,s,j}\) 表示到 \(i\) 已经有的 \(k\) 的倍数的集合为 \(s\),当前是 \(j\),转移直接观察 gcd 即可,时间复杂度 \(\mathcal{O}(10n2^{10})\)。
还能直接数学做,其他数无所谓,只考虑 \(k\) 的倍数的排列方式,枚举一下全排列,然后其他看着填即可。

C 战场模拟器

首先考虑没有护盾和保证不死亡怎么做,线段树维护最小值及数量即可。发现死亡和护盾只有 \(\mathcal{O}(n)\) 个,总的影响是 \(\mathcal{O}(n\log n)\) 的,所以每次暴力去找死亡和护盾更新即可。赛时就是没有想到这个性质,只有 32pts。

#include<bits/stdc++.h>
#define FA std::cout<<"take easy\n"
#define int long long
#define ls p<<1
#define rs p<<1|1
#define fi first
#define se second
#define pii std::pair<int,int>
#define eb emplace_back
typedef long long ll;
typedef unsigned long long ull;
std::mt19937 myrand(std::chrono::high_resolution_clock::now().time_since_epoch().count());
inline int R(int n){return myrand()%n+1;}
inline int read(){char ch=getchar();int 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;}
const int N=2e5+10,mod=998244353,inf=1e18;
int n,Q,a[N];
inline void Min(int &x,int y){if(x>y)x=y;}
inline void Max(int &x,int y){if(x<y)x=y;}
inline void W(int &x,int y){x=(x+y)%mod;}
inline pii operator+(pii a,pii b){
	if(a.fi<0||b.fi<0){
		if(a.fi<0&&b.fi<0){return {inf,0};}
		if(a.fi<0)return b;
		else return a;
	}
	if(a.fi==b.fi){return {a.fi,a.se+b.se};}
	return std::min(a,b);
}
struct TREE{pii ans;int dead,grd,tag;}t[N<<2];
inline void update(int p){t[p].ans=t[ls].ans+t[rs].ans;t[p].dead=t[ls].dead+t[rs].dead;t[p].grd=t[ls].grd+t[rs].grd;}
inline void pushdown(int p){int x=t[p].tag;t[ls].tag+=x;t[rs].tag+=x;t[ls].ans.fi+=x,t[rs].ans.fi+=x;return t[p].tag=0,void();}
inline void build(int p,int l,int r){
	if(l==r){t[p].ans={a[l],1};return;}
	int mid=l+r>>1;build(ls,l,mid);build(rs,mid+1,r);update(p);
}
inline void protect(int p,int l,int r,int pos){
	if(l==r){if(!t[p].dead)t[p].grd++;return;}
	int mid=l+r>>1;pushdown(p);
	if(pos<=mid)protect(ls,l,mid,pos);else protect(rs,mid+1,r,pos);update(p);
}
inline void change(int p,int l,int r,int L,int R,int x);
inline void ATC(int p,int l,int r,int x);
inline void ATC(int p,int l,int r,int x){
	if(l==r){
		if(t[p].grd){t[p].grd--;}
		else t[p].ans.fi+=x;
		if(t[p].ans.fi<0)t[p].ans={inf,0},t[p].dead=1;
		return;
	}
	int mid=l+r>>1;pushdown(p);
	if(t[ls].grd||t[ls].ans.fi+x<0)ATC(ls,l,mid,x);else change(ls,l,mid,l,mid,x);
	if(t[rs].grd||t[rs].ans.fi+x<0)ATC(rs,mid+1,r,x);else change(rs,mid+1,r,mid+1,r,x);
	update(p);
}
inline void change(int p,int l,int r,int L,int R,int x){
	if(l>=L&&r<=R){
		if(x>=0||(!t[p].grd&&t[p].ans.fi+x>=0)){
			t[p].tag+=x,t[p].ans.fi+=x;return;
		}
		ATC(p,l,r,x);return;
	}
	int mid=l+r>>1;pushdown(p);
	if(L<=mid)change(ls,l,mid,L,R,x);if(R>mid)change(rs,mid+1,r,L,R,x);
	update(p);
}
inline int querydead(int p,int l,int r,int L,int R){
	if(l>=L&&r<=R){return t[p].dead;}
	int mid=l+r>>1,res=0;pushdown(p);
	if(L<=mid)res+=querydead(ls,l,mid,L,R);
	if(R>mid)res+=querydead(rs,mid+1,r,L,R);
	return res;
}
inline pii query(int p,int l,int r,int L,int R){
	if(l>=L&&r<=R){return t[p].ans;}
	int mid=l+r>>1,vis=0;pii res;pushdown(p);
	if(L<=mid)vis=1,res=query(ls,l,mid,L,R);
	if(R>mid){
		auto it=query(rs,mid+1,r,L,R);
		if(vis)res=res+it;else res=it;
	}
	return res;
}
signed main(){
    freopen("simulator.in","r",stdin);freopen("simulator.out","w",stdout);
    std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
    n=read();for(int i=1;i<=n;++i)a[i]=read();build(1,1,n);
    Q=read();for(int i=1;i<=Q;++i){
    	int op=read(),l=read(),r,x;
    	if(op==1)r=read(),x=read(),change(1,1,n,l,r,-x);
   		if(op==2)r=read(),x=read(),change(1,1,n,l,r,x);
   		if(op==3)protect(1,1,n,l);
   		if(op==4)std::cout<<querydead(1,1,n,l,read())<<'\n';
   		if(op==5){
   			auto it=query(1,1,n,l,read());
   			std::cout<<(!it.fi?it.se:0)<<'\n';
   		}
    }
}

点亮 (light)

不会

标签:std,return,49,int,res,mid,inline,CSP,模拟
From: https://www.cnblogs.com/Ishar-zdl/p/18472892

相关文章

  • 信息学奥赛复赛复习18-CSP-J2022-01解密-二分答案、二分找边界、二分时间复杂度、二分
    PDF文档公众号回复关键字:202410171P8814[CSP-J2022]解密[题目描述]给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi,使ni=pi×qi、ei×di=(pi−1)(qi−1)+1[输入格式]第一行一个正整数k,表示有k次询问。接下来k行,第i行三个正整数......
  • 「闲话」CSP 集训记萌(二)
    10.17模拟赛相关模拟赛喜欢捏,之前只有过认为自己做法是正解结果不是的经历,这次T1、T2都认为自己做法不是正解结果却是。省流:T1Dij中的dis数组没赋极大值,不然A了,T2最经典放球问题推错式子,不然A了,应该都不算挂分,因为我是宋词开场Ratio:T1纯Dij板子啊,尝试一下7:30......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛08
    Rank还行A.传送(teleport)签。单元最短路,先想Dijkstra。发现这道题还有个不同寻常的移动方式,可以以\(min\left(|x_i-x_j|,|y_i-y_j|\right)\)的代价从\(i\)移动到\(j\)。暴力连边是\(\mathcal{O(n^2)}\)的,时间空间都过不去。被叫去整内务在楼梯上想到,一个点不应......
  • 10.17 模拟赛
    炼石计划10月01日NOIP模拟赛#7【补题】-比赛-梦熊联盟(mna.wang)复盘T1一眼不会。先打了前\(30\)的爆搜。虽然这个爆搜假了但是最后也没管它。后面的暴力分挺多。先往后做。T2\(2^{2n}\)的暴力可以过\(20\)。\(n=16\)的特殊性质可以\(3^n\)枚举子集过。......
  • 2024/10/17 模拟赛总结
    \(100+50+0+35=185\),呃呃呃,终于吃上LRX了#A.语言考虑名词性词组的性质,由于它可以由任意名词,形容词和名词性词组拼接起来,那么连续的名词,形容词或交替出现都是可行的但是如果最后一个是形容词不可行,不然它就无法修饰其他词语了于是可以枚举那一个单独的动词,判断前面和后面知......
  • 1283 回文日期 枚举 模拟 时间
    #include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e3+10;//每个月的天数,2月暂时设为29天,后续会根据闰年和平年调整inta[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};intmain(){ints1,s2,ans=0;cin>>......
  • 多校A层冲刺NOIP2024模拟赛08
    多校A层冲刺NOIP2024模拟赛08\(T1\)A.传送(teleport)\(0pts\)弱化版:[ABC065D]Built?|luoguP8074[COCI2009-2010#7]SVEMIR|“迎新春,过大年”多校程序设计竞赛H二次元世界之寻找珂朵莉先不管后面加入的\(m\)条边。对于两点间的路径\(i\toj\),经过中......
  • 5253 铺地毯 枚举 模拟
    思路分析 1. 输入处理:程序首先读取地毯的数量n。然后依次读取每张地毯的信息,包括左下角坐标(a,b)和尺寸(c,d),并存储在数组中。 查询点的输入:读取要查询的点的坐标(x,y)。 3. 检查覆盖: 从最后一张地毯开始,依次向前检查每张地毯是否覆盖点(x,y)。 检查条......
  • 「模拟赛」多校 A 层联训 8
    \(22pts\),本来可以切掉前两个题的?!A.传送(teleport)签到12pts,错的很唐!我把Dij用的dis数组直接赋值成了点到1号点之间的x距离和y距离的最小值,没再赋成极大值,这样会改变Dij过程中点遍历到的顺序,然后就跑不出最短路了。好像不能算挂分?但其实赛时有点感觉是这的问......
  • 使用华三模拟器架构网络的实验
    为了记一点一些常用的配置命令拓扑图如下:lldp默认是关闭的,需要在sys层使用「lldpglobalenable」开启。设备堆叠需要防止脑裂,不可低于2跟堆叠线。dhcp在全局设置开启后,需要在端口上应用地址池的IP才生效。二层端口聚合和三层端口聚合需要先设置物理端口类型点击查看三......