zoukankan      html  css  js  c++  java
  • 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem I. Interest Targeting 模拟题

    Problem I. Interest Targeting

    题目连接:

    http://codeforces.com/gym/100714

    Description

    A unique display advertisement system was developed at the department of advertising technologies,
    Yaagl Inc. The system displays advertisements that meet the interests of the user who is currently
    watching the page.
    For this system to function properly, having a good method for computing the user’s category of interest
    and the probability of clicking an advertisement, which is related to his/her interests, is vital.
    One of your colleagues has implemented an algorithm that analyzes users’ browsing history and produces
    the results as follows:
    user id category id create time heuristic ctr
    where:
    • user id is the user identifier;
    • category id is the identifier of user’s predicted interest category;
    • create time is the prediction generation time;
    • heuristic ctr is the predicted click probability for this category.
    This information is stored in interests log table.
    Your task is to write a program which estimates the prediction quality. You are provided with log table
    events log containing advertisement display results. Each row of the table corresponds to advertisement
    display event. The table has the following columns:
    • user id is the user identifier;
    • category id is the identifier of an advertisement category;
    • adv id is the advertisement identifier;
    • show time is the advertisement display time;
    • click flag is 1, if a click had occurred, 0 otherwise.
    Your are expected to add new information from the first table to the second one, or, as SQL-developers
    usually say, do an INNER JOIN of these two tables using (user id, category id) as a key.
    While performing the join, the following conditions must be satisfied:
    • user id and category id of matching rows must be equal;
    • each row of the second table can match at most one row of the first table;
    • for a pair of matching rows the following must hold — show time > create time and
    show time − create time is minimum.
    All matching rows must appear in the result. However some rows from both tables may not appear in
    the result if they have no match.

    Input

    The first line contains the numbers interests count and events count, denoting the sizes of the
    log tables interests log and events log respectively. The sizes do not exceed 70 000. The next
    interests count lines contain rows of interests log, and the next events count lines contain rows
    of the second table. Field values are separated by a space. All field values except for click flag are
    integers belonging to the range [1, 109
    ]. For the records in interests log, all the tuples (user id,
    category id, create time) are unique.

    Output

    Output the joined table. Each row should be as follows:
    user id category id create time heuristic ctr adv id show time click flag
    Print the number of rows in the first line. Then print table rows, one per line. Order the rows by
    tuples (heuristic ctr, user id, category id, create time, adv id, show time) in the ascending order.
    Tuples are compared lexicographically, i.e. tuples are compared first by heuristic ctr, then by user id
    and so on till show time. You can output rows in any order satisfying the described criteria.

    Sample Input

    2 2
    1 1 102 200
    2 1 104 333
    2 1 33 101 0
    1 1 34 105 1

    Sample Output

    1
    1 1 102 200 34 105 1

    Hint

    题意

    简单讲,就是给你两个表,第一个表有abcd四个属性,第二个表有abcde五个属性。

    然后对于每一个第二表的项目,你都得在第一个表上找到a和b相同,但是第二个表的d和第一个表d相差最小,且大于它的项目。

    然后把这两项合并一下就好了。

    题解:

    用set维护一下就好了,一个模拟题……

    答案记得排序。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 70005;
    map<pair<int,int>,int>H;
    int cnt = 0;
    struct people{
        int a,b,c,d;
    }p[maxn];
    struct ad{
        int a,b,c,d,e;
    };
    struct cccc{
        int a,b,c,d,e,f,g;
    };
    bool cmp(cccc A,cccc B){
        if(A.d==B.d&&A.a==B.a&&A.b==B.b&&A.c==B.c&&A.e==B.e)return A.f<B.f;
        if(A.d==B.d&&A.a==B.a&&A.b==B.b&&A.c==B.c)return A.e<B.e;
        if(A.d==B.d&&A.a==B.a&&A.b==B.b)return A.c<B.c;
        if(A.d==B.d&&A.a==B.a)return A.b<B.b;
        if(A.d==B.d)return A.a<B.a;
        return A.d<B.d;
    }
    set<pair<int,int> >S[maxn];
    int getid(int x,int y){
        if(H.count(make_pair(x,y)))
            return H[make_pair(x,y)];
        H[make_pair(x,y)]=++cnt;
        return H[make_pair(x,y)];
    }
    int fiid(int x,int y){
        if(!H.count(make_pair(x,y)))
            return -1;
        return H[make_pair(x,y)];
    }
    vector<cccc> AAAAA;
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            S[i].insert(make_pair(-1,-1));
            scanf("%d%d%d%d",&p[i].a,&p[i].b,&p[i].c,&p[i].d);
            S[getid(p[i].a,p[i].b)].insert(make_pair(p[i].c,i));
        }
        for(int i=1;i<=m;i++){
            ad tmp;
            scanf("%d%d%d%d%d",&tmp.a,&tmp.b,&tmp.c,&tmp.d,&tmp.e);
            int id = fiid(tmp.a,tmp.b);
            if(id==-1)continue;
            int d = (--S[id].lower_bound(make_pair(tmp.d,0)))->second;
            if(d==-1)continue;
            cccc kkk;
            kkk.a=p[d].a,kkk.b=p[d].b,kkk.c=p[d].c,kkk.d=p[d].d;
            kkk.e=tmp.c,kkk.f=tmp.d,kkk.g=tmp.e;
            AAAAA.push_back(kkk);
        }
        printf("%d
    ",AAAAA.size());
        sort(AAAAA.begin(),AAAAA.end(),cmp);
        for(int i=0;i<AAAAA.size();i++)
            printf("%d %d %d %d %d %d %d
    ",AAAAA[i].a,AAAAA[i].b,AAAAA[i].c,AAAAA[i].d,AAAAA[i].e,AAAAA[i].f,AAAAA[i].g);
    }
  • 相关阅读:
    javascript简易下拉菜单效果
    精通javascript笔记(智能社)——简易tab选项卡及应用面向对象方法实现
    精通JS正则表达式(转)
    精通javascript笔记(智能社)——数字时钟
    ERROR: transport error 202: bind failed: Address already in use
    理解git对象
    InvocationHandler中invoke()方法的调用问题
    深入理解Java Proxy机制(转)
    IP、子网的详述 ——IP分类、网关地址,子网掩码、子网作用(转)
    getRequestDispatcher()与sendRedirect()的区别
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5752278.html
Copyright © 2011-2022 走看看