xdfz模拟赛总结集
2025.8.22 NOIP模拟赛
分数 135/400
排名 2/9
|
|
T1 |
T2 |
T3 |
T4 |
|
期望得分 |
25 |
55 |
0 |
10 |
|
实际得分 |
25 |
100 |
0 |
10 |
T1
题目描述:
(1≤n≤1e7)
开局开T1
如果没有重复的答案,那么 ans=n*(n+1)/2 ,考虑怎么减去重复项
设 G1 和 G2 是两个字符串,则 (G1G2G1)重复计算答案一次,减去1,问题变成寻找重复子串的数量,
答案减去重复的子串数量,复杂度O(n2),还要优化
先打了个暴力哈希验证正确性,似乎是对的?但是我没有证明,大样例直接就1e4了,测不了
想了下怎么优化,往字典树的方向想,感觉做法不太对,试着证明正确性,但是没有能说服我自己的证明方法
然后换方法重新做,不太确定有没有后效性
试着用区间dp,更不对了(,完全写不了
决定碰运气开始找规律,找了一个小时没啥想法就去做其他题了
最后半小时回来写了个暴力
寄(
T2
(洛谷 P7871)
第一眼感觉像差分约束,仔细想了一下发现拓扑排序能做,手模了一下样例发现我的答案比样例的字典序还小
看了好几遍没发现问题,就问了下教练,教练说没问题,
又瞪了好久,完全找不出问题,我当时以为能量传递会给传递的对象赋值,
后来试着把能量传递看成只是一个东西的位置变化,没有对序列进行修改,样例就对了
用给定大小关系建边,入度为0的点先赋答案,让字典序最小可以用一个优先队列记录入度为0的点,
按每个点在序列里的位置升序排序
最后一个大样例错了,看了一下输出的结果,发现有一个位置错了,后面的答案全部和正确答案偏移一位
大概是这样的
正确答案:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
我的答案:1 2 3 4 5 6 7 8 9 10 11 12 20 13 14 15 16 17 18 19
用一个 mt 数组记录每个点建完边只会能到达的最小的位置,堆的排序方式按每个点的 mt 升序排序
关于为什么要用 mt 数组排
位置靠前点不在堆里是因为入度不为 0 ,如果先把位置靠前的点入度变成 0 ,字典序会更小
数据:
3 1
2 3
如果直接用每个点的位置排序会先把 1 赋值给第二个点
答案:3 1 2
如果按mt排,建完边后3号点可以到1号点,mt={1,2,1}
这样排可以把 1 先给 3 号点,然后 1 号点入度变成 0 ,
答案:2 3 1
这样写大样例就过了,此时时间只剩半个小时,建边如果不优化肯定要T,如果加判重复边其他题的暴力可能就没时间打了,
我在调大样例的时候看见好多一样的 s,t ,然后判了一下碰到重复的 s,t 就不加边(居然过了,还是数据太水了)
回去写 T1 暴力
T3
题目描述:
(1≤n,m≤100,1≤ai≤n,保证 S 由 n 个 + 号和 m 个 - 号组成且在进行 Si = - 的操作时 P 为空)
没时间了,直接cout<<1
T4
题目描述:
(1≤n,q≤1e6,1≤ai≤n)
没时间,直接交暴力然后看T3

浙公网安备 33010602011771号