首页 > 其他分享 >CSP 2022 游记

CSP 2022 游记

时间:2022-10-29 23:24:59浏览次数:66  
标签:rt 大样 int res mid 2022 100 游记 CSP

Day -5 ~ 0

被石门中学邀请集训一周,于是放弃一周文化课。
每天上午刷 Codeforces,或 NOIP 真题, 晚上打模拟赛,然后 CS.
感到石门中学简直是度假村一样。

本来通知去东莞提前 3 天,后来石门申请做考场了。

Day 1

上午放松考,调整心态。
T1 写的是直接乘加上特判 1,100.
T2 写的是一元二次方程,100.
直接跳 T4 二维 dp,100.
此时已经过去了 80 分钟,旁边的 dsy 大佬已经 AK了。
然后随便做一下 T3, 只打了 \(O(n^2)\) 50.
玩一会小恐龙,经过漫长的等待,就结束了。

中午回宿舍睡觉。

下午先做的是 T2,先观察一下,分类讨论一下,
发现只要维护最大值,最小值,非正数的最大值和非负数的最小值即可。
一开始我想要只写一个函数节省代码长度,可是这样实在太麻烦了。
然后复制粘贴写了非常多线段树。
由于第 4 个大样例始终不过,于是用 cmd 的 fc 指令发现了哪里出错了。
发现当没有非正数的最大值和非负数的最小值时,返回值出错了。
于是加一个判断即可。
拿到 100 分,然而其他人似乎都挂分了.
此时竟然过去了 1.5 小时。

贴一下代码:

code
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int N=1e5+10,inf=2e9;
int n,m,q;
int a[N],b[N],mxa1[4*N],mxa0[4*N],mna1[4*N],mna0[4*N],mnb[4*N],mxb[4*N];
void buildmax0(int t[],int c[],int rt,int l,int r) {
	if(l==r) {
		if(c[l]<=0) t[rt]=c[l];
		else t[rt]=-inf;
		return ;
	}
	int mid=(l+r)/2;
	buildmax0(t,c,rt*2,l,mid);
	buildmax0(t,c,rt*2+1,mid+1,r);
	t[rt]=max(t[rt*2],t[rt*2+1]);
}
void buildmax1(int t[],int c[],int rt,int l,int r) {
	if(l==r) {
		t[rt]=c[l];
		return ;
	}
	int mid=(l+r)/2;
	buildmax1(t,c,rt*2,l,mid);
	buildmax1(t,c,rt*2+1,mid+1,r);
	t[rt]=max(t[rt*2],t[rt*2+1]);
}
void buildmin0(int t[],int c[],int rt,int l,int r) {
	if(l==r) {
		t[rt]=c[l];
		return ;
	}
	int mid=(l+r)/2;
	buildmin0(t,c,rt*2,l,mid);
	buildmin0(t,c,rt*2+1,mid+1,r);
	t[rt]=min(t[rt*2],t[rt*2+1]);
}
void buildmin1(int t[],int c[],int rt,int l,int r) {
	if(l==r) {
		if(c[l]>=0) t[rt]=c[l];
		else t[rt]=inf;
		return ;
	}
	int mid=(l+r)/2;
	buildmin1(t,c,rt*2,l,mid);
	buildmin1(t,c,rt*2+1,mid+1,r);
	t[rt]=min(t[rt*2],t[rt*2+1]);
}
int querymax(int t[],int rt,int l,int r,int x,int y) {
	if(x<=l&&r<=y) return t[rt];
	int mid=(l+r)/2,res=-inf;
	if(x<=mid) res=max(res,querymax(t,rt*2,l,mid,x,y));
	if(y>mid) res=max(res,querymax(t,rt*2+1,mid+1,r,x,y));
	return res;
}
int querymin(int t[],int rt,int l,int r,int x,int y) {
	if(x<=l&&r<=y) return t[rt];
	int mid=(l+r)/2,res=inf;
	if(x<=mid) res=min(res,querymin(t,rt*2,l,mid,x,y));
	if(y>mid) res=min(res,querymin(t,rt*2+1,mid+1,r,x,y));
	return res;
}
int main() {
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1; i<=n; i++) scanf("%d",&a[i]);
	for(int i=1; i<=m; i++) scanf("%d",&b[i]);
	buildmax1(mxa1,a,1,1,n);
	buildmax0(mxa0,a,1,1,n);
	buildmin1(mna1,a,1,1,n);
	buildmin0(mna0,a,1,1,n);
	buildmax1(mxb,b,1,1,m);
	buildmin0(mnb,b,1,1,m);
	for(int i=1; i<=q; i++) {
		int al,ar,bl,br;
		scanf("%d%d%d%d",&al,&ar,&bl,&br);
		int mina0,mina1,maxa0,maxa1,minb,maxb;
		mina0=querymin(mna0,1,1,n,al,ar);
		mina1=querymin(mna1,1,1,n,al,ar);
		maxa0=querymax(mxa0,1,1,n,al,ar);
		maxa1=querymax(mxa1,1,1,n,al,ar);
		minb=querymin(mnb,1,1,m,bl,br);
		maxb=querymax(mxb,1,1,m,bl,br);
		LL ans1=-1ll*inf*inf,ans2=-1ll*inf*inf;
		if(minb<0&&mina1!=inf) ans1=1ll*mina1*minb;
		else if(minb!=inf&&maxa1>=0) ans1=1ll*maxa1*minb;
		if(maxb<0&&mina0!=inf&&mina0<=0) ans2=1ll*mina0*maxb;
		else if(maxa0!=-inf) ans2=1ll*maxa0*maxb;
		printf("%lld\n",max(ans1,ans2));
	}
	return 0;
}

做 T1,尝试很多种办法,发现不会做,一开始是贪心选点,发现不行。
于是乎放弃,开始瞎搞,还是不行。
于是只能打 \(O(n^4)\) 暴力,甚至期间 floyd 都不会打了。
拿到 30 分。

T3 太长,没看

做 T4,我以为是直接在路径上求一个dp,但没想到的是竟然可以经过路径外的点中转。
我打了一个 \(O(qn)\) 做法,把每次询问的链拿出来跑一次 dp.
这样的话,甚至可以优化到 \(O(q\log n)\) ,但我没打。
第 4 个大样例死活过不了,我一直在检查,发现不了错误。
在 第 3 个大样例过了之后,我甚至没管第 2 个样例,其实这个样例我已经漏了上述情况。

测了一下,似乎还可以骗 40 分。

这样 30+100+40=170 估分。

标签:rt,大样,int,res,mid,2022,100,游记,CSP
From: https://www.cnblogs.com/Simon-Gao/p/16840181.html

相关文章

  • CSP2022 游记
    Day0吃了个KFCJ组:赛前:J组总得AK掉吧?!赛时:T1,切了。T2,这不解方程吗,不过做得有些复杂,还手写了int128和sqrt,但还是很快切了。T3,大模拟先放一会儿。T4,好水,还不......
  • 2022.10.29论文学习笔记
    本周看了一篇论文,论文的题目为:TowardsBetterNon-TreeArgumentMining:Proposition-LevelBiaffifineParsingwithTask-SpecifificParameterization,即走向更好的非树......
  • 2022-2023-1 20201324《信息安全系统设计与实现(上)》第6章
    目录1摘要2信号和中断进程中断进程的陷阱错误3Unix/Linux信号示例4Unix/Linux中的信号处理信号类型信号的来源段错误捕捉函数进程PROC结构体中的信号信号处理函数安装......
  • CSP-S 2022 白给记
    初赛考前心态稳健,毕竟有分就行。然后真就只是有分了(雾)考试时心态平稳,求环的个数竟然没有考虑顺时针和逆时针的问题,基数排序竟然是不稳定的(???),所以为什么读程序好难啊!!1为什......
  • 学期2022-2023-1 学号20221417 《计算机基础与程序设计》第九周学习总结
    这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第九周作业这......
  • 2022-10-29学习内容
    1.记住密码1.1LoginMainActivity.javapackagecom.example.chapter06;importandroid.app.Activity;importandroid.content.Context;importandroid.content.Inten......
  • 【2022-10-29】前端Vue框架(四)
    一、计算属性计算属性实现首字母大小写<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"......
  • 【2022-10-26】连岳摘抄
    23:59历史不应该是忘记的负担,而应该是理智的启迪。                                    ......
  • 【2022-10-25】连岳摘抄
    23:59人的一生,无疑是个大题目。有不少人,竭尽全力,想把它撰写成一篇宏伟的文章。我只能把它写成一篇小文章,一篇像案头菜花一样的散文。菜花也是生命,凡是生命,都可以成为文章......
  • CSP-S2022游记&几句话题解
    T1对于每一个点\(u\),计算点权最大的三个点,满足\(dis(u,v)\lek+1,dis(1,v)\lek+1\)。然后枚举\(B,C\),\(3^2\)枚举即可。复杂度\(O(n^2)\)。考场代码#inclu......