2014百度之星初赛(第二场)——Scenic Popularity
来源:互联网 发布:中国人工智能股票龙头 编辑:程序博客网 时间:2024/05/22 11:50
2014百度之星初赛(第二场)——Scenic Popularity
Problem Description
临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人。所以度度熊在旅游之前想通过百度地图查看一下公园内各个地方的热门程度。
假设所有景点区和休息区都是X轴直线上的一系列顶点,所对应的坐标Xi 保证唯一。每个景点区有个初始的热度值,而一个休息区(坐标为Xi)的热度值等于离它距离最近的景点区Xj的热度值(距离定义为|Xi-Xj|),如果此休息区与两个景点区的距离一样,则休息区的热度值选择两个景点区中的热度值最大值,如果两个热度值都一样,则随意选择其中一个。
度度熊在出门之前会经常去查看百度地图,每次查看前会有某些景点区的热度值已发生改变,从而也会导致周围的休息区的热度值发生改变,然后度度熊想知道当前热度值<=Rk的顶点(包括景点区和休息区)有多少个
假设所有景点区和休息区都是X轴直线上的一系列顶点,所对应的坐标Xi 保证唯一。每个景点区有个初始的热度值,而一个休息区(坐标为Xi)的热度值等于离它距离最近的景点区Xj的热度值(距离定义为|Xi-Xj|),如果此休息区与两个景点区的距离一样,则休息区的热度值选择两个景点区中的热度值最大值,如果两个热度值都一样,则随意选择其中一个。
度度熊在出门之前会经常去查看百度地图,每次查看前会有某些景点区的热度值已发生改变,从而也会导致周围的休息区的热度值发生改变,然后度度熊想知道当前热度值<=Rk的顶点(包括景点区和休息区)有多少个
Input
输入数据的第一行是测试Case的个数(T<=100)。
每个Case的第一行是N(0<N<=10000),表示景点区和休息区的总数。
接着会有N行数据,每一列首先是顶点的X坐标Xi (0< Xi <=1e8),第二列是一个整数Hi(0=<Hi <=100000),如果Hi 不为0,则表示当前顶点为风景区且初始的热度值为Hi,否则表示当前顶点为休息区。这N行数据会按照坐标Xi递增的方式依次给出。
接着的一行数据是操作的次数K(K<=100),最后会有K行数据,每一行的第一列要么是’U’或者’Q’,’U’表示当前操作为更改热度操作,’Q’表示当前操作为查询操作。如果是更改操作,接着会有两列数据,分别是热度值要改变的风景区的下标Lk(0<=Lk<N)以及改变后的热度值Vk(0< Vk<=100000);如果是查询操作,第二列是要查询的热度范围Rk(0< Rk<=100000)
每个Case的第一行是N(0<N<=10000),表示景点区和休息区的总数。
接着会有N行数据,每一列首先是顶点的X坐标Xi (0< Xi <=1e8),第二列是一个整数Hi(0=<Hi <=100000),如果Hi 不为0,则表示当前顶点为风景区且初始的热度值为Hi,否则表示当前顶点为休息区。这N行数据会按照坐标Xi递增的方式依次给出。
接着的一行数据是操作的次数K(K<=100),最后会有K行数据,每一行的第一列要么是’U’或者’Q’,’U’表示当前操作为更改热度操作,’Q’表示当前操作为查询操作。如果是更改操作,接着会有两列数据,分别是热度值要改变的风景区的下标Lk(0<=Lk<N)以及改变后的热度值Vk(0< Vk<=100000);如果是查询操作,第二列是要查询的热度范围Rk(0< Rk<=100000)
Output
对于第k组测试数据,第一行输出Case #k:,接下来对每次查询操作(即Q操作)会输出一个整数,表示满足条件的顶点数有多少个
Sample Input
1 4 10 020 330 0 40 23Q 3 U 3 4 Q 3
Sample Output
Case #1:42
Source
2014年百度之星程序设计大赛 - 初赛(第二轮)
AC代码:
直接暴力破解;PS:cin读入会超时and貌似就会这一题啊
#include<cstdio>#include<cstdlib>#include<algorithm>#define MAX 10005using namespace std;typedef struct Node{int x;int h;int flag;}Node;void Work(Node Area[],int n){int i;int mindis;int maxheat;for(i=0;i<n;i++){mindis=100000005;maxheat=0;if(Area[i].flag==1){for(int j=i+1;j<n;j++){if(Area[j].flag==0){mindis=Area[j].x-Area[i].x;maxheat=Area[j].h;break;}}for(int k=i-1;k>=0;k--){if(Area[k].flag==0){if(Area[i].x-Area[k].x<mindis)maxheat=Area[k].h;else if(Area[i].x-Area[k].x==mindis)maxheat=max(maxheat,Area[k].h);break;}}Area[i].h=maxheat;}}}void Update(Node Area[],int n,int l,int k){Area[l].h=k;Work(Area,n);}void Query(Node Area[],int n,int r){int ans=0;for(int i=0;i<n;i++){if(Area[i].h<=r)ans++;}printf("%d\n",ans);}int main(int argc,char *argv[]){int t;scanf("%d",&t);for(int i=1;i<=t;i++){printf("Case #%d:\n",i);Node Area[MAX];int n,k;scanf("%d",&n);for(int j=0;j<n;j++){scanf("%d%d",&Area[j].x,&Area[j].h);if(Area[j].h==0)Area[j].flag=1;elseArea[j].flag=0;}Work(Area,n);scanf("%d",&k);while(k--){char op[2];scanf("%s",op);if(op[0]=='Q'){int r;scanf("%d",&r);Query(Area,n,r);}else{int l,v;scanf("%d%d",&l,&v);Update(Area,n,l,v);}}}return 0;}
0 0
- 2014百度之星初赛(第二场)——Scenic Popularity
- 2014百度之星初赛第二轮解题报告:Scenic Popularity
- 2014百度之星初赛第二轮代码注释:Scenic Popularity
- 2014百度之星初赛(第二场)——Chess
- 2014百度之星初赛(第二场)——JZP Set
- 2014百度之星初赛(第二场)——Best Financing
- 百度之星 初赛第二场
- 百度之星2015初赛第二场
- 百度之星初赛第二场1005
- hdu4834 百度之星2014初赛第二场
- 模拟-hdoj-4831-百度之星2014初赛第二场
- 赛题集锦—2008年百度之星程序设计大赛初赛第二场题
- 2008百度之星第二场初赛题目
- 【百度之星】初赛第二场:B网页聚类
- 2012百度之星初赛第二场ProblemC
- 2012百度之星初赛第二场A题解答
- [DFS]百度之星初赛第二场 棋盘占领
- 百度之星初赛第二场 1006错误代码别看了
- 网址
- linux -- xinput 输入设备管理
- Linux下面开起启动服务命令(chkconfig、ntsysv)
- oracle 分割字符串 截取字符串
- Dozer轻松实现对象间属性复制
- 2014百度之星初赛(第二场)——Scenic Popularity
- 排序算法之快速排序的随机化版本
- 网页生成二维码的例子
- 外观(Facade)
- 通过TFTP服务器,往开发板下载程序
- SqlCommand.Parameters.Add()用法
- 递归的小结
- 二十一 --我在软件园的那些日子里
- Android.mk高级写法