hdu 2555

Problem Description

杭州师范大学第29届田径运动会圆满的闭幕了,本届运动会是我校规模最大,参赛人数最多的一次运动会。在两天半时间里,由学生、教工组成的61支代表队共2664名运动员参加了比赛。比赛期间,运动健儿赛出了风格、赛出了水平,共有9人次打破6项校纪录。
我们寝室的4名同学是我班最卖力的啦啦队员,每天都在看台上为班级里的运动员们加油助威,为我班获得精神文明奖立下了汗马功劳。可是遗憾的是,与我校的其他近2万名同学一样,我们自己不能上场表演 :(
于是,我们4名同学为下一届校运会发明了一种人人都能参加的比赛项目:
在地面上有N 个大小不等的长方形陷阱,每个陷阱的周长各不相同,每个参赛者都有一个沙包,闭上眼睛把它扔向地面,如果沙包掉到了某个陷阱里,那么这个参赛者根据这个陷阱的周长长度(如50米),绕跑道跑陷阱的周长长度(如50米),如果沙包没有掉到任何一个陷阱里,那么恭喜你,你跑0米。
有m<20000个同学参加了比赛,为了给跑步跑得最多的三位同学(冠军、亚军、季军)颁发安慰奖,必须给这m个同学的跑的长度按从多到少排序。
如下图一样的坐标系与长方形,这些长方形(陷阱)的四条边都与X轴或Y轴平行,它们之间互不相交,它们的左上角顶点的坐标与右下角顶点的坐标已知,给定一个你扔出去的沙包(看作是一个点)的坐标,可以得到你要跑的距离。(注意,这里的坐标值都不超过10000)

Input

第一行是两个正整数m<20000,n<100,它表示有m 个同学参加了扔沙包比赛,有n个陷阱。
接下去m行是m个同学扔出去的沙包的坐标,每一行都是两个正整数。
接下去的n行是陷阱的坐标,每行有4个正整数,它们从左到右分别是:陷阱左下角顶点的横坐标的值、陷阱左下角顶点的纵坐标的值,陷阱右上角顶点的横坐标的值、陷阱右上角顶点的纵坐标的值。

Output

m个同学按跑的距离的多少,从多到少输出,一个数字一行。

Sample Input

5 3
15 27
32 93
22 3
98 4
65 23
22 65 100 76
2 5 7 9
54 6 94 24

Sample Output

116
0
0
0
0

Author

cgf

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
struct node
{
 int x,y;
}stu[20001];
struct nodee
{
 int x,x1,y,y1;
 int l;
}flo[101];
bool cmp(int x,int y)
{
 return x>y;
}
int main()
{
 int m,n,i,j,race[20001],flag;
 while(cin>>m>>n)
 {
  for(i=0;i<m;i++)
  {
  // cin>>stu[i].x>>stu[i].y;
   scanf("%d %d",&stu[i].x,&stu[i].y);
  }
  memset(race,0,sizeof(race));
  for(i=0;i<n;i++)
  {
  // cin>>flo[i].x>>flo[i].y>>flo[i].x1>>flo[i].y1;
   scanf("%d %d %d %d",&flo[i].x,&flo[i].y,&flo[i].x1,&flo[i].y1);
   flo[i].l=(flo[i].x1-flo[i].x)*2+(flo[i].y1-flo[i].y)*2;
  }
  for(i=0;i<m;i++)
  {
   flag=0;
   for(j=0;j<n;j++)
   {
    if(flo[j].x<=stu[i].x&&flo[j].x1>=stu[i].x&&flo[j].y<=stu[i].y&&flo[j].y1>=stu[i].y)
    {
     flag=1;
     break;
    }
   }
   if(flag) race[i]=flo[j].l;
   else race[i]=0;// 亮点在这里 如果每次都进行清零的话 会超时。。  这里就巧妙的避开的这个问题
  }
  sort(race,race+m,cmp);
  for(i=0;i<m;i++) printf("%d\n",race[i]);
 }
 return 0;
}

时间: 2024-10-19 07:29:09

hdu 2555的相关文章

HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)

Problem Description 杭州师范大学第29届田径运动会圆满的闭幕了,本届运动会是我校规模最大,参赛人数最多的一次运动会.在两天半时间里,由学生.教工组成的61支代表队共2664名运动员参加了比赛.比赛期间,运动健儿赛出了风格.赛出了水平,共有9人次打破6项校纪录. 我们寝室的4名同学是我班最卖力的啦啦队员,每天都在看台上为班级里的运动员们加油助威,为我班获得精神文明奖立下了汗马功劳.可是遗憾的是,与我校的其他近2万名同学一样,我们自己不能上场表演 :( 于是,我们4名同学为下一届

HDU分类

模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 12

转载:hdu 题目分类 (侵删)

转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116

hdu 4122 Alice&amp;#39;s mooncake shop (线段树)

题目大意: 一个月饼店每一个小时做出月饼的花费不一样. 储存起来要钱.最多存多久.问你把全部订单做完的最少花费. 思路分析: ans = segma( num[]*(cost[] + (i-j)*s) ) 整理一下会发现式子就是 cost[]-j*s + i*s 对于每个订单,我们把i拿出来分析 所以也就用cost - j*s 建树. 然后在储存期间找到最小的花费即可了. #include <cstdio> #include <iostream> #include <algo

HDU——PKU题目分类

HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201

hdu 4122 Alice&#39;s mooncake shop (线段树)

题目大意: 一个月饼店每个小时做出月饼的花费不一样. 储存起来要钱,最多存多久.问你把所有订单做完的最少花费. 思路分析: ans = segma( num[]*(cost[] + (i-j)*s) ) 整理一下会发现式子就是 cost[]-j*s + i*s 对于每一个订单,我们把i拿出来分析 所以也就用cost - j*s 建树. 然后在储存期间找到最小的花费就行了. #include <cstdio> #include <iostream> #include <algo

HDU——T 1054 Strategic Game

http://acm.hdu.edu.cn/showproblem.php?pid=1054 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8510    Accepted Submission(s): 4096 Problem Description Bob enjoys playing computer games, espec

HDU 6203 ping ping ping [LCA,贪心,DFS序,BIT(树状数组)]

题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=6203] 题意 :给出一棵树,如果(a,b)路径上有坏点,那么(a,b)之间不联通,给出一些不联通的点对,然后判断最少有多少个坏点. 题解 :求每个点对的LCA,然后根据LCA的深度排序.从LCA最深的点对开始,如果a或者b点已经有点被标记了,那么continue,否者标记(a,b)LCA的子树每个顶点加1. #include<Bits/stdc++.h> using namespace std;

HDU 5542 The Battle of Chibi dp+树状数组

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:给你n个数,求其中上升子序列长度为m的个数 可以考虑用dp[i][j]表示以a[i]结尾的长度为j的上升子序列有多少 裸的dp是o(n2m) 所以需要优化 我们可以发现dp的第3维是找比它小的数,那么就可以用树状数组来找 这样就可以降低复杂度 #include<iostream> #include<cstdio> #include<cstring> #include