成都信息工程大学第八届校赛 H J 题解
H. Bang Bang Keli Ba
题目大意
给定数组 ,构造递增序列 和递减序列 且 。
题解
下面证明解的存在性,存在性证明后,解也就出来了。
对于序列 ,一个递增,一个递减就意味这 的差分数组 每个元素都大于等于 , 的差分数组 每个元素都小于等于 。对于 的差分数组 ,我们同样有 ,于是对于 ,我们把它拆成一个非负数和一个非整数的和即可,显然是存在无数多的解的。
同时也有其他很多解法,在此不介绍了。
AC代码
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
using ll = long long;
constexpr int N = 1e5+5, P = 1e9+7;
int a[N], b[N], c[N];
int main() {
int n; cin>>n;
rep(i,1,n+1)cin>>a[i];
rep(i,1,n+1){
int x = a[i] - a[i-1];
if (x < 0) c[i] = x;
else b[i] = x;
b[i] += b[i-1];
c[i] += c[i-1];
}
rep(i,1,n+1)cout<<b[i]<<" \n"[i==n];
rep(i,1,n+1)cout<<c[i]<<" \n"[i==n];
return 0;
}
J. No Idea
题目大意
从 个数中选至少 个数,使这几个数的 为 ,问方案数。
题解
考虑容斥。定义函数 为 为 的方案数,那么答案就是 。另外再定义一个函数 ,表示 为 的倍数的方案数。根据定义,我们有
移项得
于是我们就可以想出这么一种解法:从大到小开始算,假设现在算到了 ,我们先算出 ,那么
就可以由上式解出。下面考虑如何计算 .
考虑这么一个组合问题:从 个不同的球里选不少于 个球的方案数。答案即为
具体的实现方法为,用一个数组记录每个数字出现了多少次(因为数的大小最多只有 ),然后从 遍历到 ,设当前遍历到了 ,于是记录有多少个 的倍数,然后套上上述的组合问题即可得到 。再减去其倍数的 函数值,即可得到 。扫到 即可得到答案。
AC代码
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
using ll = long long;
constexpr int N = 2e5 + 5, P = 998244353;
int v[N], f[N], pw[N];
void precompute() {
pw[0] = 1;
rep(i,1,N)pw[i]=pw[i-1]*2%P;
}
int main() {
precompute();
int n; cin>>n;
rep(i,0,n){
int x; cin>>x;
v[x] ++;
}
for(int i=N-1;i;i--){
int cnt = 0;
for (int j=i;j<N;j+=i)cnt+=v[j];
f[i]=(pw[cnt]-1-cnt+P)%P;
for (int j=i+i;j<N;j+=i)f[i]=(f[i]-f[j]+P)%P;
}
cout<<f[1];
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫