2021.09.02pm

--- 预期 实际
A 100 100
B 100 100
C 100 100
D 100 100
E 100 100
F 100 100
G 100 100
H 100 30
S 800 770

水菜

A 回文日期\(\blacktriangle\!\blacktriangledown\)

  1. 方法一:打表
  2. 方法二:枚举合法年份,翻转过去看日期,月份是否合法(特别是2月!),再看是否在期限内,简单但细节多

B 最大公约数\(\blacktriangle\)

RT

C 校门外的树\(\blacktriangle\)

数据范围太水了,区间直接修改赋值,复杂度\(O(lm)\)

D 蛇形方阵2\(\blacktriangle\!\blacktriangledown\)

  1. 一道之前卡我好久的题,现在看来不过如此
  2. 分成两部分:一部分是左上,一部分是右下规则不太一样,主要就是确定两个要素:起点与方向。
	for(int i=1;i<=n;i++){//i=n并到哪个for循环都行,只不过要稍微修改
		if(i%2){//因为是蛇形,一次向下,一次向上
			px=n-i+1;py=1;//起点位置
			for(int k=1;k<=i;k++){
				ans[px][py]=++num;
				px++;py++;//方向
			}
		}
		else{
			px=n;py=i;
			for(int k=1;k<=i;k++){
				ans[px][py]=++num;
				px--;py--;
			}
		}
	}
	for(int i=1;i<n;i++){
		if((i+n)%2){
			px=1;py=i+1;
			for(int k=1;k<=n-i;k++){
				ans[px][py]=++num;
				px++;py++;
			}
		}
		else{
			px=n-i;py=n;
			for(int k=1;k<=n-i;k++){
				ans[px][py]=++num;
				px--;py--;
			}
		}
	}

E 单点修改,区间查询 \(\blacktriangle\!\blacktriangledown\)

裸的树状数组,不过运气比较好,不过听说输入判断不是if(q==1),else就过不了

F 溶液模拟器 \(\blacktriangle\!\blacktriangledown\)

模拟,不过注意要开long long,对于 \(Z\) 操作开个栈就行,栈的第0位存初始,这样能保证重复 \(Z\) 操作导致段错误

G 转圈问题 \(\blacktriangle\!\blacktriangledown\)

快速幂,比较裸,没啥好说的

H 生日 \(\blacktriangle\!\blacktriangledown\!\blacktriangle\!\blacktriangledown\)

  1. 这好像是道 \(NPC\) ,只能硬枚,唯一的优化是把它掰两半,这样能从 \(O(2^{40})\) 优化到 $O(2^{20}) $

  2. 考试时的做法是第一遍 \(dfs\) \(1 \to n/2\),用 \(set\) 维护一下,然后再跑第二次 \(dfs\) \(n/2+1 \to n\) 查找是否能拼接成 \(m\) 但是吧,用 \(set\) 会导致时间复杂度飙到 \(O((\log_{2}{2^{20}})*2^{20})\) ,本机上运行时间差不多,不过由于学校机子比较玄学或者数据比较强,导致只有 \(30pts\)

  3. 然后通过一些途径(薅代码),成功整到正解:\(hash\)。这样常数会优化一些,就能过掉。不过呢,hash就有点玄学了。我用的是三遍hash,\(1145147,1428579,2005803\),时间还是比较优秀。但都不是质数,下来也找到了比较接近的质数:\(1145141,1428571,2005831\)
    image
    \(\cal {Made} \ {by} \ {yuge}\)

posted @ 2021-09-02 20:45  u2003  阅读(68)  评论(0)    收藏  举报