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\n",AAAAA.size());
sort(AAAAA.begin(),AAAAA.end(),cmp);
for(int i=0;i<AAAAA.size();i++)
printf("%d %d %d %d %d %d %d\n",AAAAA[i].a,AAAAA[i].b,AAAAA[i].c,AAAAA[i].d,AAAAA[i].e,AAAAA[i].f,AAAAA[i].g);
}
2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem I. Interest Targeting 模拟题的更多相关文章
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力
Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉
Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem C. Contest 水题
Problem C. Contest 题目连接: http://codeforces.com/gym/100714 Description The second round of the annual ...
- 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest Problem L. Lazy Coordinator
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229511 时间限制:1s 空间限制:512MB 题目大意: 给定一个n 随后跟着2n行输入 ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem J. Joke 水题
Problem J. Joke 题目连接: http://codeforces.com/gym/100714 Description The problem is to cut the largest ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem H. Hometask 水题
Problem H. Hometask 题目连接: http://codeforces.com/gym/100714 Description Kolya is still trying to pass ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题
Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem A. Alien Visit 计算几何
Problem A. Alien Visit 题目连接: http://codeforces.com/gym/100714 Description Witness: "First, I sa ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
Problem D. Grumpy Cat 题目连接: http://www.codeforces.com/gym/100253 Description This problem is a littl ...
随机推荐
- bug处理
当提示405 method not allowed 时候,路由可能有问题,看看路由是get/post 是否合格
- Spring Boot实战系列-----------邮件发送
快速导航 添加Maven依赖 配置文件增加邮箱相关配置 Service.Test项目代码构建 五种邮件发送类型讲解 文本邮件 html邮件 附件邮件 html内嵌图片邮件 模板邮件 问题汇总 添加ma ...
- Oracle 修改用户名
1.开始- 运行 - 输入“CMD” 确定 2.在弹出来的窗口中,输入:SQLPLUS / AS SYSDBA 回车 3.然后,用命令修改:alter user 用户名 identified by ...
- lucene修改索引——(六)
原理: 修改的原理是先删除,后增加一个,这也是常用的一种修改的方式. 删除的文档的id不会被新增加的文档占用,类似于mysql的自增,当删除一个id=2时,以后id=2就是空着的,不会上来一个把2给占 ...
- python之pip安装mysql-python失败
前言 由于公司使用的python版本是python2,并且连接mysql的包是mysql-python,但是mysql-python 使用pip安装报错,需要C++环境等依赖,于是使用wheel直接安 ...
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题【转】
转自:https://blog.csdn.net/hunanchenxingyu/article/details/47003279 本文介绍了ARM代码编译时的软浮点(soft-float)和硬浮点( ...
- nginx_upstream_check_module监控后端服务器http
nginx_upstream_check_module 是专门提供负载均衡器内节点的健康检查的外部模块,由淘宝的姚伟斌大神开发,通过它可以用来检测后端 realserver 的健康状态.如果后端 re ...
- 不使用第三方软件、使用IE11自带功能来屏蔽浏览器广告
第一步: 下载后面的附件http://files.cnblogs.com/limits/IE11%E5%8E%BB%E5%B9%BF%E5%91%8A.zip 打开此路径IE11跟踪保护+CSS去广告 ...
- Java与PHPweb开发比较
参考:https://blog.csdn.net/loophome/article/details/83413878
- javascript-dom文档对象模型1
HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. 一:HTML DOM 树 ...