9.27 模拟赛(NOIP十三连测 #10)
2024--梦熊&太戈--NOIP十三连测 #10【订正】 - 比赛 - 梦熊联盟 (mna.wang)
复盘
开 T1。差分转化。模拟了一下样例感觉方案好像是唯一确定的,不需要贪心/DP。但不太能证。
想了会感觉找不出反例。然后写完了。对拍没挂。用时不到
T2。
发现不会正解,但是有
T2 正解先放,看 T3。
数位 DP?好像不是。想到了 ABC363D,但好像没关系。
没关系吗?我可以通过 ABC363D 的方法,处理出所有
然后对拍没挂。尝试卡常通过
开 T4。不是第二档部分分直接按题意模拟啊,这种红题难度的部分分给了
第一档倍增也会。有
我好像忘了数据随机。于是加了一些针对随机优化。一个比较重要的是将前面的数去重。然后跑自己造的
1.6s。
不是啊????????????我是不是过了。
显然没过。最终
其实 T2 只要再加一个优化就过了。但我好像想到了(?)但是感觉不太好写(?)所以没写。
总结
好的:
- 想出了 T1。
- 没挂分。
不足:
- 不会乱搞。
题解
A. 小 C 玩扑克
注意到区间
区间反转可以差分转化,然后变成单点修改
注意到每个区间是否需要反转是唯一确定的。考虑归纳证明。
对于
我们考虑所有满足
求出这些
所以我们就唯一确定了每个区间是否反转。所以输入的
B. 小 C 写代码
显然这不是个贪心/DP题。我们只需要算每一行的最小代价,加和即可。
两种做法。
暴力+优化
代码比文字好理解。复杂度是
bool st[2 * N];
vector<int> v[N];
int solve() {
for (int i = 0; i < 1 << m; ++ i )
v[ppc(i)].push_back(i);
int res = 0;
for (int i = 1; i <= n; ++ i ) {
int x = 0;
for (int j = 0; j < m; ++ j ) {
char c = getchar();
while (c != '1' && c != '0') c = getchar();
x = x * 2 + c - '0';
}
if (st[x]) res ++ ;
else {
int p = c;
for (int j = 0; j <= m; ++ j )
for (int k : v[j])
if (st[x ^ k]) {
p = min(p, j + 1);
break;
}
st[x] = true;
res += p;
}
}
return res;
}
正解
令
我们要支持对
- 查某个特定的
; - 编写一行新的代码,并修改所有
。
注意到
考虑搜索。类似 SPFA,只有当
所以复杂度是
提交记录 #633164 - 梦熊联盟 (mna.wang)
C. 对称数之和
考虑
分类讨论:
-
如果
位数相同:-
如果
不回文那么答案是 。 -
否则,每个对应位单独计算贡献,乘法原理即可。
具体的,如果这一位两个数的和是
,那么:- 如果
:方案数是 。因为 可以取 。 - 如果
:方案数是 。因为 可以取 。
- 如果
-
-
如果
位数不同: 中必有一个与 有相同位数。不妨设为 ,最后将方案数乘 。枚举
的位数( )。满足如上条件的 在至多只有一个。因为如果存在那么必定是这种形式:这是一个例子。其实就是通过做差和回文转移得到的。
得到这个后判断一遍是否所有条件都合法即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?