10.3题解
考场脑抽T2读错题了
T1
签到题。
模拟大家都会,下面是
#include <iostream>
using namespace std;
int w, k, a, n;
int main()
{
cin >> w >> k >> a >> n;
if(n > k)
cout << (2 * n * w + a * k * (2 * n - k - 1)) / 2;
else
cout << n * (2 * w + a * (n - 1)) / 2;
return 0;
}
T2
下图中特别大的两个点是对称点,没有箭头的点坐标为 (x,y)。
主对角线:
副对角线:
注意判断点是否喵喵点时,既要判断本身,又要判断对称点!
如果某个位置是 1 ,并且它关于主对角线对称的位置和关于副对角线对称的位置都为 1 ,那么这个点就称为一个喵喵点。
#include <iostream>
#include <cstdio>
using namespace std;
int n, a[150][150], ans, vx, vy;
int main()
{
cin >> n;
for(int i = 1;i <= n;++i)
for(int j = 1;j <= n;++j)
scanf("%1d", &a[i][j]);
for(int i = 1;i <= n;++i)
for(int j = 1;j <= n;++j)
if(a[i][j] && a[j][i] && a[n - j + 1][n - i + 1]) ++ans;
cout << ans;
return 0;
}
T3
我们要知道,选出的两个数排序后一定相邻。
首先,
因为
而且并一定是包含交的,
而交和并的不同部分,就是在并中但不在交中的部分,
换句话说,就是
那么题意就可以转化为:
给定数列
那么为什么选出的两个数排序后一定相邻呢?
我们知道,想要两个数异或值最小,那么这两个数要尽量接近。
那么我们假如选了排序后不相邻的
则排序后的
所以只需要拍一遍序,枚举相邻的两个数,每次更新答案即可。
#include <iostream>
#include <algorithm>
using namespace std;
int n, a[100050], ans = 1e9;
int main()
{
cin >> n;
for(int i = 0;i < n;++i)
cin >> a[i];
sort(a, a + n);
for(int i = 1;i < n;++i)
ans = min(ans, a[i] ^ a[i - 1]);
cout << ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具