26建华暑期集训 CSP-J 模拟赛(8/7)
| 题号 |
题目 |
测评结果 |
代码问题 |
错因 |
需改进 |
| A |
阅读书籍 |
WA |
你的代码写成max(其余总和,最大值)2;等价max(其余2,max2),不等于max(sum,2max)。当 sum>2*max 时会错。 |
贪心公式写错 |
多检查(改了一行就AC) |
| B |
自习室 |
TLE |
暴力 O (Q・N);打乱题目给定有序 L;条件写错 |
复杂度爆炸 + 读题漏条件 |
多换几个思路,多想几种方法 |
| C |
棋盘落子 |
RE |
开 1000×1000 小数组,越界 RE;暴力循环清空行列,时间爆炸 |
空间、时间暴力,不会转化模拟 |
| D |
公告墙 |
WA |
骗分 |
投机,没写正解😓 |
增加知识面 |
第一题:
#include<bits/stdc++.h>
using namespace std;
long long t[200001], ans=0;
long long cnt1, cnt2;
int main(){
freopen("books.in","r",stdin);
freopen("books.out","w",stdout);
long long n;
cin>>n;
for(long long i=0;i<n;i++) cin>>t[i];
sort(t, t+n);
cnt2=t[n-1];
for(long long i=0;i<n-1;i++){
cnt1+=t[i];
}
long long total=cnt1+cnt2;
ans=max(total, cnt2*2);
cout<<ans;
return 0;
}
第二题:
#include<bits/stdc++.h>
using namespace std;
struct stu{
long long h, l;
}t[300001];
long long maxh[300001];
long long L[300001];
long long x;
long long f(long long n, long long T){//找第一个 L[i] > T 的下标
long long left=0, right=n;
while(left<right){
long long mid=(left+right)/2;
if(L[mid]>T) right=mid;
else left=mid+1;
}
return left;
}
int main(){
freopen("study.in","r",stdin);
freopen("study.out","w",stdout);
ios::sync_with_stdio(false);
long long n, m;
cin>>n;
for(long long i=0;i<n;i++){
cin>>t[i].h>>t[i].l;
L[i] = t[i].l;
}
maxh[n]=0;//预处理后缀最大值
for(long long i=n-1;i>=0;i--) maxh[i]=max(t[i].h, maxh[i+1]);
cin>>m;
for(long long i=0;i<m;i++){
cin>>x;
long long pos=f(n, x);
cout<<maxh[pos]<<'\n';
}
return 0;
}
三四题没改对😓