POJ 3269 中位数
来源:互联网 发布:网络小贷 资金来源 编辑:程序博客网 时间:2024/06/15 07:39
题意:
思路:
这道题坑也不少。。 你准备好脑洞了么?
首先
要认真审题 题目中有说:“没有两头牛的吃草位置是相邻的”
这句话让我们省了很多的事儿 (Discuss里有的大神就入了这个坑了)
然后呢
自然想到了中位数 (不要问我怎么想到的)
但是如果n为偶数怎么办呢 就取两个中间位置的数那段区间呗~
本以为随便搞搞
就像酱紫,就完了呢….
然而 我想简单了….
还有几步没有想到
1. 中间的那个点被牛占了怎么办
2. 矩形区间里面有牛怎么办
对于第一个问题
遍历它旁边的所有点(上下左右) 找到合适的点(可能是好几个)并统计
再重复一遍这句话“没有两头牛的吃草位置是相邻的”
对于第二个问题 判个重就OK了……
最后放一个毕克大爷的数据
(我跟他的结果一样 嘿嘿)
(不一样不就惨了嘛……)
//By SiriusRen #include <cmath>#include <cstdio>#include <algorithm>using namespace std;int n,xx[]={1,-1,0,0},yy[]={0,0,1,-1};struct Point{int x,y;}point[10005];bool cmp1(Point a,Point b){return a.x<b.x;}bool cmp2(Point a,Point b){return a.y<b.y;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&point[i].x,&point[i].y); if(n&1){ int ans=0,l,r; sort(point+1,point+1+n,cmp1); int ansx=point[n/2+1].x; sort(point+1,point+1+n,cmp2); int ansy=point[n/2+1].y; for(l=n/2+1;l>=1;l--) if(point[l].y!=point[l-1].y)break; for(r=n/2+1;r<=n;r++) if(point[r].y!=point[r+1].y)break; for(int i=l;i<=r;i++){ if(i==r) { for(int i=1;i<=n;i++){ ans+=fabs(point[i].x-ansx); ans+=fabs(point[i].y-ansy); } printf("%d 1\n",ans); return 0; } if(ansx==point[i].x)goto end; } end:int answer=0x3ffffff,temp; for(int i=0;i<=3;i++){ ans=0; int tempx=ansx+xx[i]; int tempy=ansy+yy[i]; for(int i=1;i<=n;i++){ ans+=fabs(point[i].x-tempx); ans+=fabs(point[i].y-tempy); } if(answer>ans)answer=ans,temp=1; else if(answer==ans)temp++; } printf("%d %d\n",answer,temp); } else{ sort(point+1,point+1+n,cmp1); int ansx=point[n/2].x,ans=0,ansx2=point[n/2+1].x,recs=0; sort(point+1,point+1+n,cmp2); int ansy=point[n/2].y,ansy2=point[n/2+1].y; for(int i=1;i<=n;i++) ans+=fabs(point[i].x-ansx),ans+=fabs(point[i].y-ansy); for(int i=1;i<=n;i++) if(point[i].x>=ansx&&point[i].x<=ansx2&&point[i].y>=ansy&&point[i].y<=ansy2) recs++; printf("%d %d\n",ans,(ansx2-ansx+1)*(ansy2-ansy+1)-recs); }}
0 0
- POJ 3269 中位数
- POJ-4013:中位数
- POJ 2388(中位数)
- poj 2388中位数
- poj 1723 SOLDIERS 中位数
- poj 1723 中位数
- POJ-1723 中位数
- POJ 2313 中位数的应用
- POJ 2010 二分找中位数
- POJ 3784 动态求中位数
- POJ - 3579(二分法找中位数)
- poj 2388 c++:寻找中位数
- POJ 2388 求中位数 qsort用法
- POJ 2388 (堆排序求中位数)
- poj 1723Soldiers 带全中位数
- POJ 1160 Post Office Dp+中位数贪心
- [POJ 1723]SOLDIERS(带权中位数问题)
- POJ 3579:Median 差值的中位数
- 使用时间戳解决浏览器缓存问题
- 中国电信天翼开放平台自定义短信验证码和模板短信demo
- a different object with the same identifier value was already associated with the session.
- linux终端绝佳配色方案
- Myeclipse SVN插件使用
- POJ 3269 中位数
- hibernate插入中文到mysql数据库乱码
- CentOS通过日志反查入侵
- 页面上画按钮的四种方法
- Eclipse中的Web项目无法自动部署到Tomcat
- jsp页面时间获取并判断
- jsp页面刷新后保留文本输入框和下拉框的值
- if continue 语句
- mysql循环批量插入测试数据