错了一个样例(样例11),已找到原因
原题链接:116895.小午历险记之古籍卷轴2026-05-13 15:07:00
发布于:北京
错了一个样例,逻辑分析了,AI求助了,找不到反例。有大佬来给指导一下吗?
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n, a[N];
int main() {
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
sort(a+1, a+n+1);
int need=1, i=1, j=n, cnt=0;
while(i<=j) {
if(a[i]==need) { //当前为所需
i++;
need++;
} else if(a[i]<need) { //当前比所需小,先存起来
i++;
cnt++;
} else { //当前比所需大,兑换,优先使用存起来的小的兑换
if(cnt>=2) { //2张换一张
cnt-=2;
need++;
} else if(cnt==1) { //只有一张小的,加1张大的换
cnt-=1;
j--;
need++;
} else { //没有小的,用两张大的换
if(i<j) {
j-=2;
need++;
} else break;
}
}
}
while(cnt>=2) { //把所有小的 2张换一张需要的
cnt-=2;
need++;
}
cout<<need-1;
return 0;
}
已找到反例:
5
1 1 3 3 4
错误原因:应该优先使用比need 编号小的 以及 重复出现的卷轴。
这里空空如也














有帮助,赞一个