CSP-J2023游记

发布时间 2023-10-22 12:16:50作者: FinderHT

第一轮

Day0


0天警告

Day \(1\)

开考,听说是 姜sir 批卷,也没啥好紧张的了。

选择题靠我垃圾的C++,第一题就错了/cf,两道数学题和位运算倒是秒切。阅读程序很顺利,只错了一道,到了补全程序只剩 \(10\text{min}\) 了,瞎蒙了几个,居然对的还不少。

出来后找 byr 对答案,他说他忘了,差评。

Day \(\infty\)

出成绩了,\(80 pts\),稳过线。

顺便膜拜一下 wxy 大佬:一个初一女生,结果考了 \(93pts\),全市第一名。

第二轮

Day \(0\)

坐 @register_long_double 大佬的爸爸的车去日照考试。

中途 @register_long_double 用我的手机玩 原神,结果吐了,我的手机啊啊啊!这下真是玩原神玩的了。

刚下高速就看见了 @ebzyl 和他的父母,巧合的事发生了/jy。

下午大概五点到了房间,颓了会儿知乎,然后写了一下【CSP-J2019】纪念品(埋下伏笔),很奇怪用二维数组做背包 \(45pts\),但把第一维删掉就AC了,@I_am_kunzi 在那玩一款我也不知道叫什么的小游戏。

六点去吃饭,看见了 @BYR_KKK、@CheZiHe929 和 @Minecraft_lb 大佬,@ljlbj_fengyuwuzu 问我认不认识xxx(我的一个同班同学),然后把我带去 @bylgd 桌前,他居然知道关于 xxx 的一些不可描述的事情,十分震惊。

吃完饭去试机,发现给我们发了 CSP-J2019 的题目,诶下午恰好做了,\(30\) 就分钟AK了。出来找不找我们队,转了好一会才找到他们在旗杆下面233。

回酒店打了个【CSP-J2020】方格取数,然后定了个明天 \(6:00\) 的闹钟,铃声是《千本樱》,就睡了。

Day \(1\)

我和 @I_am_kunzi 被昨晚定的《千本樱》吵醒了,我起来看了会QQ小世界,然后就去吃早饭,\(7:30\) 吃完早饭就坐大巴上路了。

在大巴上看了会儿 LIS 和 背包(结果没考),到山外后 姜sir 叮嘱了几句就上考场了。

\(8:05\) 进了考场,打了个快读和 LIS 就开考了。

直接开 T1,推了几组发现规律,直接把第一问做了,用一个 while 循环直到 \(n \ne 0\),每次减去 \(\left \lceil n/3\right \rceil\)。第二问也十分简单,直接在第一问的 while 循环里做即可,当 \((n-1) \mid 3\) 时,正好能拿走最后一个苹果,即第 \(n\) 号苹果,\(15 \text{min}\) 切了。

Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int x=0;
	int f=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		x=(x<<3)+(x<<1)+(ch-48);
		ch=getchar();
	}
	return x*f;
}
int x;
signed main(){
	freopen("apple.in","r",stdin);
	freopen("apple.out","w",stdout);
	int cnt=0;
	int n=read();
	bool flag=true;
	while(n){
		cnt++;
		if((n-1)%3==0&&flag){
			x=cnt;
			flag=false;
		}
		if(n%3==0)n=n-n/3;
		else n=n-(n/3+1);	
	}
	cout<<cnt<<' '<<x;
	return 0;
}

T2 一眼丁真,鉴定为 贪心(因为普及组 T2 不可能是dp)

不难发现,车每次加油的站点的油价一定是降序的,这样才能使最终总价最小。我们维护目前经过站点的最小油价,以及到下一个可加油站点所经过的路程。

每次找到比上一个加油站点油价小的就要在这里加油,并更新上述变量。我们还要维护一个汽车目前能跑的千米数,因为每次加油后跑到

下一个要加油的站点可能会有剩下的油,还能跑一段距离,可以减少当前的加油量,因此我们每次更新答案时还要考虑这种情况。

注意当到达最后一个站点要停止,并做一次更新。

Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int x=0;
	int f=1;
	char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-')f=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		x=(x<<3)+(x<<1)+(ch-48);
		ch=getchar();
	}
	return x*f;
}
const int MAXN=1e5+10;
int a[MAXN],v[MAXN];
int ans=0;
int sygl=0;
signed main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	int n=read(),d=read();
	for(int i=2;i<=n;i++)v[i]=read();
	for(int i=1;i<=n;i++)a[i]=read();
	int tmp=0;
	int lst=a[1];
	for(int i=1;i<=n;){
		while(i++){
			tmp+=v[i];
			if(a[i]<lst||i==n)break;
		}
		if(i>n)break;
		ans+=(((long long)ceil((tmp-sygl*1.0)/(d*1.0)))*lst);
		sygl+=(((long long)ceil((tmp-sygl*1.0)/(d*1.0)))*d);
		lst=a[i];
		sygl-=tmp;
		tmp=0;
	}
	cout<<ans;
	return 0;
}

T3 不出意外,又是大模拟,我一个 \(7\) 年级蒟蒻根本不会啊qwq。

想把 性质C 的 \(50pts\) 得到,眼瞎没看到求根公式,所以暴力求解了一下,但可能会被卡。

因为不是正解,就不贴代码了。

T4 一开始写了个 A*,结果样例都过不了,无奈输出 \(-1\)

出来后得知 @I_am_kunzi 前三道样例全过了,看来 \(300+\) 省前十是稳了。其他人也都好强,一问都是 \(200+\)

吃了午饭便返程了。

下午老师发了代码,我先到洛谷测了一下是\(100+100+40+10 = 250\)。很明显是 \(T3\) 暴力被卡了,小图灵是
\(100+100+50+10 = 260\) 倒是挺理想,打听了一圈好像小图灵比洛谷数据准,还强(?)

小图灵出了个一键查分功能,查了一下我似乎是全省第 \(38\),似乎队里几个大佬都没我高/jk。

洛谷我们队有几个大佬和我分差不多,现在我就在赌 CCF 的数据强度,希望不要卡我 T3(当然也有可能洛谷数据出错了,测了好几个OJ都是 \(50\))。

就算 T3 保龄一等都是稳的。但如果想要五级,就有赌的成分了。

既然考完了,那就没有必要去想了,现在我的主要任务就是备战期中考试,下个周一切都将揭晓!