其他分享
首页 > 其他分享> > 【PAT甲级】1129 Recommendation System (25分)(维护出现频率最多的K个数字,K小于等于10)

【PAT甲级】1129 Recommendation System (25分)(维护出现频率最多的K个数字,K小于等于10)

作者:互联网

题意:

输入两个正整数N和K(N<=50000,K<=10),接着输入一行N个正整数(1~N),从第二个数开始,每次输入K个它出现在他之前的数字(包括他自己,按照出现频率降序排序,出现频率相同按照数字大小从小到大排序,如之前出现过的数字个数不到K个,则有多少输出多少)。数据保证至少有一次输出。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 int a[50007];
 5 map<int,int>mp;
 6 pair<int,int>pr[20];
 7 int vis[50007];
 8 bool cmp(pair<int,int>a,pair<int,int>b){
 9     if(a.first!=b.first)
10         return a.first>b.first;
11     return a.second<b.second;
12 }
13 int main(){
14     ios::sync_with_stdio(false);
15     cin.tie(NULL);
16     cout.tie(NULL);
17     int n,k;
18     cin>>n>>k;
19     for(int i=1;i<=n;++i)
20         cin>>a[i];
21     mp[a[1]]=1;
22     vis[a[1]]=1;
23     pr[1]={1,a[1]};
24     int cnt=1;
25     for(int i=2;i<=n;++i){
26         sort(pr+1,pr+1+cnt,cmp);
27         cout<<a[i]<<":";
28         for(int j=1;j<=k;++j){
29             if(pr[j].first==0)
30                 break;
31             cout<<" "<<pr[j].second;
32         }
33         if(i<n)
34             cout<<"\n";
35         ++mp[a[i]];
36         if(cnt<k){
37             if(vis[a[i]]){
38                 for(int j=1;j<=cnt;++j)
39                     if(pr[j].second==a[i])
40                         ++pr[j].first;
41             }
42             else
43                 pr[++cnt]={mp[a[i]],a[i]};
44             vis[a[i]]=1;
45         }
46         else if(!vis[a[i]]){
47             if(mp[a[i]]>pr[k].first){
48                 vis[pr[k].second]=0;
49                 pr[k]={mp[a[i]],a[i]};
50                 vis[a[i]]=1;
51             }
52             else if(mp[a[i]]==pr[k].first&&a[i]<pr[k].second){
53                 vis[pr[k].second]=0;
54                 pr[k]={mp[a[i]],a[i]};
55                 vis[a[i]]=1;
56             }
57         }
58         else if(vis[a[i]])
59             for(int j=1;j<=cnt;++j)
60                 if(pr[j].second==a[i])
61                     ++pr[j].first;
62     }
63     return 0;
64 }

 

标签:pr,1129,PAT,25,int,vis,second,mp,first
来源: https://www.cnblogs.com/ldudxy/p/12644749.html