PAT1129 原题题目大意及思路代码运行截图收获 原题 题目大意及思路 **题目大意:**每输入一个数,就输出k个推荐的数(首先按之前出现频率最高的从后排,若出现频率一致,则index小的在前)**分析:**这个推荐是实时更新的,所以选取一个合适的数据结构很重要,这里我选取了数据类型为node的set结构,在这里由于需要排序,所以重载了运算符。 代码 #include<iostream> #include<vector> #include<set> using namespace std; struct node{ int index,frequency; bool operator < (const node &a) const{ return frequency==a.frequency?index<a.index:frequency>a.frequency; } }; int main(){ int n,k; cin>>n>>k; vector<int> fre(n+1); set<node> s; for(int i=0;i<n;i++){ int index; cin>>index; int j=0; if(s.size()!=0) printf("%d: ",index); for(auto it=s.begin();it!=s.end()&&j<k;it++){ printf("%d",it->index); if(j==k-1||j==s.size()-1) printf("\n"); else printf(" "); j++; } if(fre[index]!=0) s.erase({index,fre[index]}); s.insert({index,++fre[index]}); } return 0; } 运行截图 收获 重载运算符基本格式: bool operator < (const node &a) const{ return frequency==a.frequency?index<a.index:frequency>a.frequency; } 用迭代器的一般这样取值:it->index