• CCF认证201909-4 推荐系统


    训练了一波读脑残题

    训练了一波后台数据出错还没得骂的心态,or蜜汁 题意?

    复习了一波STL用法,练了一波手速,

    题解:码农大模拟,end。。

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define io std::ios::sync_with_stdio(false)
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    const int P = 1e9+7, INF = 0x3f3f3f3f;
    ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    ll qpow(ll a,ll n){ll r=1%P;for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
    struct cmpp{   //重载set运算符 ,让set从begin开始最大
        bool operator()(const pii& a, const pii& b){
            if(a.fi==b.fi)
                return a.se<b.se;
            return a.fi>b.fi ;
        }
    };
    unordered_map<int,int> mp[51];
    set<pii,cmpp> se[51];
    struct node
    {
        int t;
        int id;
        int s;
        node(){}
        node(int x,int y,int z)
        {
          t=x;
          id=y;
          s=z;
        }
    };
    bool cmp(node a,node b)
    {   if(a.s==b.s)
         {
           if(a.t==b.t)
            return a.id<b.id;
           return a.t<b.t;
         }
        return a.s>b.s;
    }
    vector<node> ans;
    vector<int> anss[51];
    int main()
    {
        io;
        int m,n;
        cin>>m>>n;
        for(int i=1;i<=n;i++)
        {
           int id;int s;
           cin>>id>>s;
           for(int i=1;i<=m;i++)
           {
               mp[i][id]=s;
               se[i].insert(make_pair(s,id));
           }
        }
        int q;
        cin>>q;
        while(q--)
        {
            int op;
            cin>>op;
            if(op==1)
            {    int t,id,s;
                cin>>t>>id>>s;
                t++;
                mp[t][id]=s;
                se[t].insert(make_pair(s,id));
            }
            if(op==2)
            {   int t,id;
                cin>>t>>id;
                t++;
                int s=mp[t][id];
                mp[t][id]=0;
                se[t].erase(se[t].find(make_pair(s,id)));
            }
            if(op==3)
            {
                int k;
                cin>>k;
                for(int i=1;i<=m;i++)
                {   int x;
                    cin>>x;
                    int cnt=0;
                    for(auto v:se[i])
                    {
                       if(cnt==x||cnt==k)break;
                       ans.push_back(node(i,v.se,v.fi));
                       cnt++;
                    }
                }
                sort(ans.begin(),ans.end(),cmp);
                int cnt=0;
                for(auto v:ans)
                {
                    if(cnt==k)
                    break;
                    int id=v.id;
                    int t=v.t;
                    anss[t].push_back(id);
                    cnt++;
                }
                /*for(int i=1;i<=m;i++)   //其实把这行注释带上才是正解,但是这题脑残,我也不知道题意没读懂还是后台数据错了,
                {
                    sort(anss[i].begin(),anss[i].end());
                }*/
                for(int i=1;i<=m;i++)
                {
                    if(anss[i].size()==0)
                        cout<<-1<<endl;
                    else
                    {
                        for(int x: anss[i])
                        {
                            cout<<x<<' ';
                        }
                        cout<<endl;
                    }
                    anss[i].clear();
                }
                ans.clear();
            }
        }
    }
  • 相关阅读:
    抽屉视图第三方控件
    数组NSArry注意事项
    NSInteger 和 NSUInteger 比较大小的注意事项
    IOS应用中的二维码生成和二维码扫描解析
    FMDatabase 的使用(转)
    ASIHTTPRequest的简单使用
    关于MBProgressHUD的使用
    获取文件夹大小
    31. Next Permutation(中等,搞清楚啥是 next permutation)
    Deap Learning (吴恩达) 第一章深度学习概论 学习笔记
  • 原文地址:https://www.cnblogs.com/acmLLF/p/13654240.html
Copyright © 2020-2023  润新知