Noi 十连测 Zbox loves meizi
题目描述
从小热爱妹子的Zbox开始玩妹子了.Zbox是校草,必然有大量妹子来追Zbox.Zbox发现有2000*2000个妹子正在向他靠近,排成一个2000*2000的矩阵.每个妹子有一个魅力值,在茫茫人海中不同的妹子的魅力值是不同的.Zbox认为,一个妹子是他看得上的妹子,当且仅当她的魅力值高于他周围所有妹子的任何一个的魅力值,比如图中红色格子的妹子是Zbox看得上的.
Zbox患有密集恐惧症,他想尽快找到一个他看得上的妹子以便于哗~
评分方式
如果对于任意一组数据你的程序能在6050次询问及以内返回正确答案得100分
如果对于任意一组数据你的程序能在16050次询问及以内返回正确答案得70分
如果对于任意一组数据你的程序能在48050次询问及以内返回正确答案得50分
如果对于任意一组数据你的程序能在180050次询问及以内返回正确答案得30分
如果对于任意一组数据你的程序能在4000050次询问及以内返回正确答案得10分
如果对于任意一组数据你的程序返回错误答案得0分
如果你的程序运行时发生错误得0分
如果你的程序运行时间超出限制得-10分(骗你的)
SOL:
应该是分治吧。 表要向我提粒子群。
yjq:偷偷告诉你们一个秘密,粒子群没人卡~~~
没人卡~~~没人卡~~~没人卡~~~没人卡~~~没人卡~~~没人卡~~~
没人卡~~~没人卡~~~没人卡~~~没人卡~~~没人卡~~~没人卡~~~
(⊙o⊙)…
#include <bits/stdc++.h> #include "MXPOINT.h" using namespace std; #define pii pair<int,int> int rr[2010][2010]; int ask(int x,int y){ if(rr[x][y]) return rr[x][y]; if((x<1)||(x>2000)||(y<1)||(y>2000)) return -1; return rr[x][y]=ASK(x,y); } int yl[2001]; #define Mid (l+r>>1) pii fz(int l,int r){ for(int i=1;i<=2000;i++) yl[i]=ask(Mid,i); pii maxn; for(int i=1;i<=2000;i++) maxn=max(maxn,pii(yl[i],i)); int p=maxn.second,s=ask(Mid,p); int l_=ask(Mid-1,p),r_=ask(Mid+1,p); if(l_<maxn.first&&r_<maxn.first) return pii(Mid,p); if(l_<r_) return fz(Mid+1,r); else return fz(l,Mid-1); } pii FINDMXPOINT(){ memset(rr,0,sizeof(rr)); return fz(1,2000); }