2024国庆S综合强化Day1
A 四舍五入
link
求{ (别问怎么发现的)左边就是
我们把序列分为许多段
对于有贡献的点,由于是一个区间,我们可以枚举每个区间,用差分来把这个区间的前一半(也是一个区间)都加一,代表这个区间的每一个
复杂的
记得优化输入输出。
神奇的代码
#include<bits/stdc++.h>
using namespace std;
int n;
int ans[2000005];
signed main(){
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
cin >> n;
for(int j = 1;j <= n;++ j){
for(int i = 0;i <= n;i += j){
ans[i] += 1;
ans[min(i+(j-1)/2+1,n+1)] -= 1;
}
}
for(int i = 1;i <= n;++ i)
ans[i] += ans[i-1],printf("%d ",ans[i]);
return 0;
}
B 填算符
(50分)做法
先不考虑第三个条件。
首先我们想一位的情况,&要求高,只有两边都是
现在就该考虑第三个条件了。
我们考虑把&往后移,首先我们规定这些&的位置的大小关系就是现在这样的,因为如果不同我们就可以交换一下。从最靠后的那个开始移,依次枚举这一个放在
因为枚举每个&有一个
神奇的代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int a[1000005];
int ans;
int wz[1000005];
int fh[1000005];
signed main(){
freopen("bitop.in","r",stdin);
freopen("bitop.out","w",stdout);
cin >> n >> k;
for(int i = 1;i <= n;++ i)
cin >> a[i];
ans = a[1];
for(int i = 1;i <= k;++ i){
ans &= a[i+1],wz[i] = i;
fh[i] = 1;
}
for(int i = k+1;i < n;++ i){
ans |= a[i+1];
fh[i] = 0;
}
int w = n-1;
for(int i = k;i >= 1;-- i){
fh[i] = 0;fh[w] = 1;
int res = ans-1;
while(res != ans&&w > 0){
//cout << w << " ";
res = a[1];
for(int j = 1;j < n;++ j){
if(fh[j] == 1) res &= a[j+1];
else res |= a[j+1];
}
if(res != ans) swap(fh[w],fh[w-1]),w--;;
}
wz[i] = w;
w--;
}
for(int i = 1;i <= k;++ i)
cout << wz[i] << " ";
return 0;
}
(满分)做法
我们要优化掉扫序列求答案的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具