分析
对于第 k k k 天,如果能找到一个题目数大于 k k k 且之前没有用做过题的题单,那么就将答案加 1 1 1,否则就输出结果,结束程序。
为了方便找题目数大于 k k k 个的题单,所以在最开始可以进行升序排序,之前已经排除过的就不需要再判断了。
好啦,可以开始愉快的写代码啦!
code
#include<iostream>
#include<algorithm>
using namespace std;
int n,arr[1000000],ans,loction;
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
sort(arr,arr+n);//升序排序
for(ans=1;loction<n;++ans,++loction) {
while(arr[loction]<ans&&loction<n-1) ++loction;//找到题目数大于1且之前没有做过题目的题单
if(arr[loction]<ans&&loction+1==n) break;//退出循环
}
cout<<--ans;//输出结果,一定要将ans减1
return 0;
}