posted on 2022-10-28 22:41:08 | under 日志 | source

GD 已经有代码了!游记写在代码里,搬过来吧。

2022.10.29。

GD-J00015 / GD-S00013。

FS 石门中学。

震惊:两个编号如此接近!

day 0

在 SS 机房颓废。

CMB 画饼:FS 初中生第一。

day 1 morning J

8:30

好困啊!!!

8:47

pow 一眼 AC,注意到特判 \(a=1\) 之后最多跑 \(O(\log b)\) 次所以是暴力题。

9:30

decode AC,做法是找一个二次函数的零点,三份求最高点,再在左边二分。

9:45

由于实在担心 decode 挂掉所以打了两个对拍,一个有解一个无解。

10:00

发现,上厕所要监考员跟着去,什么玩意???

去年在广大附中还是押身份证的。

10:30

expr AC。数据太难造了,不拍了。就是建出一棵表达式树然后 dfs。因为有那个优先级的问题,要把表达式反过来建,前后加一对括号,很稳。

另外能不能解释一下 GDB 不可用的问题???

11:00

point AC。

排序一下,DP,和隔壁 LIS 一样:

\[f_{i,k}=\max_j\{f_{j,k-dist(i,j)+1}+dist(i,j)\}. \]

\(dist(i,j)\) 是两点的曼哈顿距离,中间不够的用虚点填满。

AK 了,What should i do?

day 1 noon

在石门会议室吃盒饭,乐。伙食不能说很好,只能说梦回金华。

HY 有人过生日,于是牺牲了休息时间吃蛋糕。

听到有人说 decode \(O(1)\),其实我很想问的是它们怎么判边界呢?你看二分乱搞:

LL n,e,d,s;
LL f(LL p){
	return p*s-p*p-n;
}
LL ternary(LL l,LL r){
	while(r-l>10){
		LL d=(r-l)/3;
		if(f(l+d)<f(r-d)) l+=d;
		else r-=d;
	}
	LL ans=l;
	for(LL i=l;i<=r;i++) if(f(ans)<f(i)) ans=i;
	return ans;
}
LL binary(LL l,LL r){
	LL ans=-1;
	for(LL mid=(l+r)>>1;l<=r;mid=(l+r)>>1){
		if(f(mid)<0) l=mid+1;
		else ans=mid,r=mid-1;
	}
	return ans;
}
int mian(){
	s=n-e*d+2;
	if(s<0) return puts("NO"),0;
	LL ans1=binary(1,ternary(1,1e9)),ans2=s-ans1;
	if(1<=ans1&&1<=ans2&&f(ans1)==0&&f(ans2)==0){
		if(ans1>ans2) swap(ans1,ans2);
		printf("%lld %lld\n",ans1,ans2);
	}else puts("NO");
	return 0;
}

好吧我承认我不会一元二次方程。

day 1 afternoon S

14:30

背包放错考场了,差点进了上午的考场。

就我的意思是,上午在电脑 2 室考,下午找准考证时看错了。

同一桌竟然是同校的 @Sunny郭 。

进行一个题目的看。

15:00

B 有点思路?是不是把 \(\min,\max_{<0},0,\min_{>0},\max\) 都拎出来跑一遍就行了,不是很确定。

15:27

B AC,机房 cmd 不能运行程序,说是缺少一个什么 .dll,可见准备之仓促。

写了 8 个 STable,然后枚举两个人共 25 种决策……

反正复杂度很对,不会超时,对吗?

15:30

发现 A,D 好像是同一个东西。。。今天图论专场是吧???

A 首先 \(O(nm)\) 最短路(BFS 谢谢喵),然后呢?暴力枚举两个点?
如何求出 \(f_{u,v}\) 表示 \(\max_{to_{u,k}\land to_{k,v}} v_k\)
枚举 \(k\) 然后更新 或者 枚举 \(u,v\) 去找 \(k\)
那么是不是说把两者结合呢?

\(k=0\) 是【模板】无向图三元环计数! 说明这个题可做。

16:00

枚举景区 B,C,那么只会用到 \(f_{1,u}\),复杂度 \(O(n^2+nm)\)

笑。

16:05

SB gdb 竟然有查看数组容量限制!!!

于是决定进行一个输出调试。

16:20

A AC。开始进行一个 C 的看。

考场通知:C 题样例解释中最后一个“第 \(5\) 次”改为“最终”。

16:30

C 两个限制分别为 \(out_u=1\) 和有环。

线段树分治。用并查集,如果 \(query(u,v)=\textbf{true}\) 那就有环出现。

假的!

17:30

写了很久终于干掉了 C 的暴力 20pts,期望很快吧。观察到需要重新跑 tarjan 的次数可以很少,我只在所有 \(out_u=1\) 的时候跑 tarjan 缩点。

还有一个小时想写 D。
性质:

  • \(k=1\) 是树上前缀和;
  • \(k=2\) 必然会沿着路径走,一个 DP;
  • \(k=3\) 最多走到一个儿子那里,不会走更深的地方。

先写树剖吧。

特殊性质就是说深度很小,可以把链拉出来跑暴力。

感觉可以点分治!写不写???

其实一直有矩阵乘法优化 DP 的冲动(我是说动态 DP),但是,先写暴力吧。。。

18:24

\(k=3\) 挂了。不知道怎么挂的,大样例错两个。

今天到此为止。感觉非常不舒服(心理上的),没有写出 \(k=3\) 的情况,我感觉我的 D 都快接近正解了,但我没时间写了!!!

18:27

CSP2022-S,再见!

目测 \(100+100+20+30\)。提高一等没啥问题吧,但是 CMB 画的饼可能有大问题。谁知道呢。等个七天再说。

day 1 evening

学校教练太强了,已经有代码了。J/S 都有的那种,可惜不知道怎么发到 luogu 上。

J 组 AK!同校的 @Lucky9568 、@Prominence 也都 AK 了,我直接 Orz。

luogu:\(S=100+100+?+56\)

终于发现了,C 题如果每个点都连出一条出边,是必然有环的(不然给个反例?),所以只需要维护 \(out\),还不是很会接下来怎么做。

D 题一直没有算到底多少分,luogu 给了 \(56\) 分。没有 TLE 是没有想到的。

day 2

INFOJ:\(100+100+40+44=284\)

C 题算错分了,原来是 8 个测试点。

D 题 \(k=3\) 的暴力调出来了:点权算了两次。

LL dp3(int u,int v){
	int cnt=split(u,v);
	f[0][0]=f[0][1]=f[1][1]=1e18,f[1][0]=a[pos[1]];
	for(int i=2;i<=cnt;i++){
		f[i][0]=f[i][1]=1e18;
		if(i>=3) f[i][0]=f[i-3][0]+a[pos[i]];
        //                         ^~~~~~~~~
		f[i][0]=min({f[i][0],f[i-1][0],f[i-1][1],f[i-2][0],f[i-2][1]})+a[pos[i]];
        //           ^~~~~~~                                           ^~~~~~~~~
		int j=minx[pos[i]][0]==pos[i-1]?minx[pos[i]][1]:minx[pos[i]][0]; 
		f[i][1]=min({f[i-1][0],f[i-1][1],f[i-2][0]})+a[j];
	}
	return min(f[cnt][0],f[cnt][1]+a[v]);
}

写对了就 76 分了!

jisuanke:\(100+100+60+44=304\),A 题数据造错(\(m\leq 10^5\))我也没办法,当它过了吧。

score

J 不用看了 AK

S:

  • luogu \(100+100+60+56=316\)
  • infoj \(100+100+40+44=284\)
  • jisuanke \([85,100]+100+60+44=[289,304]\)
  • youdao \(100+100+40+44=284\)

主要波动:

  • jisuanke A 数据多了个 0,TLE
  • T3 memset bool 数组的时候写了 sizeof(int),infoj 提示 dangerous system calls
  • T4 希望草多一点 k=2 的分

原文地址:http://www.cnblogs.com/caijianhong/p/travel-in-csp2022.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性