被一道cf水题卡了半天的时间,主要原因时自己不熟悉c++stl库的函数,本来一个可以用库解决的问题,我用c语言模拟了那个函数半天,结果还超时了。
题意大概就是,给定n个数,查询k次,每次查询过后,输出最小的一个不为零的数x,同时这给定的n个数都要减去x。其实当一个数被输出后就可被丢弃了,因为它变成了0,成为了无用信息。
同时要求从小到大找,所以这道题可以直接用set函数解决,每输出一个数,就从set列表里删除。
下面插入代码
#include <bits/stdc++.h> using namespace std; int n,k,t=0,x; set<int> s; int main() { cin>>n>>k; for(int i=0;i<n;i++) { cin>>x; s.insert(x); } while(k--) { if(s.empty()) cout<<0<<endl; else { x=*s.begin(); cout<<x-t<<endl; t=x; s.erase(x); } } return 0; }