巅峰赛前三道题解
2026-09-19 13:17:22
发布于:浙江
本人较菜,只做出前三道题
第一题:
A150241.山间烤羊
笨方法,所有情况枚举一遍(我写的贪心会卡5个测试点)
贪心(卡5个测试点)
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
int k,a[4];
cin >> k >> a[1] >> a[2] >> a[3];
sort(a+1,a+4);
//cout << a[1] << " " <<
// a[2] << " " << a[3] << "\n";
if(k>=a[3]){
k-=a[3];
}
if(k>=a[2]){
k-=a[2];
}
if(k>=a[1]){
k-=a[1];
}
cout << k << "\n";
}
return 0;
}
枚举(能过)
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin >> t;
while(t--){
int k,a[4],b[6];
cin >> k >> a[1] >> a[2] >> a[3];
b[0]=k,b[1]=k,b[2]=k,b[3]=k,b[4]=k,b[5]=k;
//枚举六种情况
if(b[0]>=a[1])b[0]-=a[1];
if(b[0]>=a[2])b[0]-=a[2];
if(b[0]>=a[3])b[0]-=a[3];
if(b[1]>=a[1])b[1]-=a[1];
if(b[1]>=a[3])b[1]-=a[3];
if(b[1]>=a[2])b[1]-=a[2];
if(b[2]>=a[2])b[2]-=a[2];
if(b[2]>=a[1])b[2]-=a[1];
if(b[2]>=a[3])b[2]-=a[3];
if(b[3]>=a[2])b[3]-=a[2];
if(b[3]>=a[3])b[3]-=a[3];
if(b[3]>=a[1])b[3]-=a[1];
if(b[4]>=a[3])b[4]-=a[3];
if(b[4]>=a[1])b[4]-=a[1];
if(b[4]>=a[2])b[4]-=a[2];
if(b[5]>=a[3])b[5]-=a[3];
if(b[5]>=a[2])b[5]-=a[2];
if(b[5]>=a[1])b[5]-=a[1];
sort(b,b+6);
cout << b[0] << "\n";
}
return 0;
}
第二道:
A150242.山间音乐会
数学排序就行
AC代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
int t;
cin >> t;
while(t--){
ll a,b,c,d,e;//记得开long long
cin >> a >> b >> c >> d >> e;
if(d>=2)cout << a*b*c*d*e+a*b*c*(d*(d-1)/2) << "\n";
else cout << a*b*c*d*e << "\n";
}
return 0;
}
第三题:
A150243.山间抹茶宴
前缀和
AC代码(时间2e10其实是acgo测评机跑太快了)
#include<bits/stdc++.h>
using namespace std;
const int mn = 2e5+9;
long long a[mn],b[mn],c[mn],d[mn],dp[mn];
int main(){
int t;
cin >> t;
while(t--){
int n;
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
}
for(int i=1;i<=n;i++){
cin >> b[i];
}
for(int i=1;i<=n;i++){
c[i] = a[i]+b[i];
d[i] = d[i-1]+a[i];
}
for(int i=1;i<=n;i++){
if(c[i]==c[i-1])dp[i] = dp[i-1]+1;
else dp[i] = 1;
}
long long ans = 0;
for(int i=1;i<=n;i++){
ans = max(ans,(d[i]-d[i-dp[i]])*dp[i]);
}
cout << ans << "\n";
}
return 0;
}
这里空空如也





















有帮助,赞一个