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);
}
原文地址:https://www.cnblogs.com/rrsb/p/8561440.html