A. The Man who became a God
题意:将一个数组划分为k部分,使得每个部分的相邻数字的差值的绝对值之和的和最小是多少
思路:按照差值排个序,将差值最大的k个删除,即可
代码:
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n,k;
cin>>n>>k;
k--;
vector<int>ans;
vector<int>q(n);
for(int i=0;i<n;i++){
cin>>q[i];
}
for (int i = 1; i <n ; ++i) {
ans.push_back(abs(q[i]-q[i-1]));
}
sort(ans.begin(),ans.end(),greater<int>());
for (int i = 0; i <ans.size()&&k!=0 ; ++i,k--) {
ans[i]=0;
}
int res=0;
for (int i = 0; i < ans.size(); ++i) {
res+=ans[i];
}
cout<<res<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
}
B. Hamon Odyssey
题意:一个数组的数据,f[l,r]是指al到ar的&和,问保证和最小的情况下,数组最多能分成几段
思路:易证,分成一段时,&的和最小,且最小值是>=0,当f[1,n]是非0,任意区间的f函数值是>=f[1,n]的,那么我们可以从1开始遍历,即找每一段的函数值为0,分成多少段,可知当前面是0时,下一个数字放到下一个区间是优于加到目前的区间的,因为放到当前区间首先无影响,但加到下一个区间是有可能使下一个区间的值更小,因此我们找可以分成几个0区间即可,如果没有0的区间,那么就分成1到n这一段
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
void solve(){
int n;
cin>>n;
vector<int>q(n+2);
for (int i = 1; i <=n ; ++i) {
cin>>q[i];
}
int sum=0;
int res=0;
sum=q[1];
for (int i = 1; i <=n ; ++i) {
sum&=q[i];
if(sum==0){
res++;
sum=q[i+1];
}
}
cout<<max(1,res)<<endl;
}
int main(){
int t;
cin>>t;
while (t--){
solve();
}
}
C. Vampiric Powers, anyone?
题意:
给定一个数组,如a b c d 选择任意一个区间,做异或和,得到e放入结尾,无限次操作,问可得到的最大数是多少,我们可以知道新生成的数字是由原数组abcd异或得来的,如果我们用新形成的数字做异或和获得新数字,abcd efgh是新数组,我们对fgh异或和为x,defgh异或和为y ,x^y就等于d^e,由此可知我们所加的数字是原数组任意区间的异或和。
- 由此我们得到结论,此题是在所有子区间内,输出最大区间的异或和。
-
暴力枚举的话,会超时,但我们可以发现数据范围在256之内,我们求一遍前缀异或和,如何再两层for循环,即可求出我们能得到的最大的区间异或和
代码:
#include<bits/stdc++.h> using namespace std; #define int long long #define PII pair<int,int> void solve(){ int n; cin>>n; vector<int>q(n+1); set<int>st; st.insert(0); for (int i = 1; i <=n ; ++i) { cin>>q[i]; q[i]=q[i]^q[i-1]; st.insert(q[i]); } int ans=0; for (auto i:st) { for (auto j:st) { ans=max(i^j,ans); } } cout<<ans<<endl; } signed main(){ ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr); int t=1; cin>>t; while (t--){ solve(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】