Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 最近对SPOJ logN时间错误答案_C++_Algorithm_Sorting_Closest - Fatal编程技术网

C++ 最近对SPOJ logN时间错误答案

C++ 最近对SPOJ logN时间错误答案,c++,algorithm,sorting,closest,C++,Algorithm,Sorting,Closest,我正在努力解决这个问题 我的主要想法是把坐标分成几个部分,在同一部分中,所有的点都有相同的x。按x和y对所有坐标进行排序 什么时候我会检查哪些点最接近Ni,我会将其与高y相同x和低y相同x进行比较。我还将尝试搜索x坐标的前一部分,并使用二进制搜索它们,我还将搜索x坐标的下一部分。但我总是得到错误的答案。谁能告诉我怎么了。代码如下 #include <stdio.h> #include <stdlib.h> #include <algorithm> #inclu

我正在努力解决这个问题
我的主要想法是把坐标分成几个部分,在同一部分中,所有的点都有相同的x。按x和y对所有坐标进行排序
什么时候我会检查哪些点最接近Ni,我会将其与高y相同x和低y相同x进行比较。我还将尝试搜索x坐标的前一部分,并使用二进制搜索它们,我还将搜索x坐标的下一部分。
但我总是得到错误的答案。谁能告诉我怎么了。代码如下

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <utility>
#include <map>
#include <vector>
using namespace std;
typedef pair<int,int>par;
typedef long long int ll;
par niz[55000];
map<ll,ll>mapa2;
map<par,ll>mapa;
map<ll,ll>mapa3;
vector<par>V[55000];
ll a,b,c,d,e,f;
double euk=1561561616;
ll toc=0,toc2=0;
ll pos1=1,pos2;
void binary(ll pos,ll end)
{
     if(pos<pos1-1)
     {

      ll tockay=V[pos][end].second;
      ll low=0;
      ll high=V[pos+1].size();
      ll midd=0;
      while(low<=high)
      {
         midd=(low+high)/2;
         if(V[pos+1][midd].second>tockay)high=midd-1;
         else low=midd+1;
      }
      if(euk>sqrt((V[pos][end].first-V[pos+1][midd].first)*(V[pos][end].first-V[pos+1][midd].first)+(V[pos][end].second-V[pos+1][midd].second)*(V[pos][end].second-V[pos+1][midd].second)))
      {
        euk=sqrt((V[pos][end].first-V[pos+1][midd].first)*(V[pos][end].first-V[pos+1][midd].first)+(V[pos][end].second-V[pos+1][midd].second)*(V[pos][end].second-V[pos+1][midd].second));
        toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
        toc2=mapa[make_pair(V[pos+1][midd].first,V[pos+1][midd].second)];
      }
      if(midd-1>=0)
      {
         if(euk>sqrt((V[pos][end].first-V[pos+1][midd-1].first)*(V[pos][end].first-V[pos+1][midd-1].first)+(V[pos][end].second-V[pos+1][midd-1].second)*(V[pos][end].second-V[pos+1][midd-1].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos+1][midd-1].first)*(V[pos][end].first-V[pos+1][midd-1].first)+(V[pos][end].second-V[pos+1][midd-1].second)*(V[pos][end].second-V[pos+1][midd-1].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos+1][midd-1].first,V[pos+1][midd-1].second)];
         } 
      }
      if(midd-2>=0)
      {
         if(euk>sqrt((V[pos][end].first-V[pos+1][midd-2].first)*(V[pos][end].first-V[pos+1][midd-2].first)+(V[pos][end].second-V[pos+1][midd-2].second)*(V[pos][end].second-V[pos+1][midd-2].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos+1][midd-2].first)*(V[pos][end].first-V[pos+1][midd-2].first)+(V[pos][end].second-V[pos+1][midd-2].second)*(V[pos][end].second-V[pos+1][midd-2].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos+1][midd-2].first,V[pos+1][midd-2].second)];
         } 
      }
      if(midd+1<V[pos+1].size())
      {
         if(euk>sqrt((V[pos][end].first-V[pos+1][midd+1].first)*(V[pos][end].first-V[pos+1][midd+1].first)+(V[pos][end].second-V[pos+1][midd+1].second)*(V[pos][end].second-V[pos+1][midd+1].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos+1][midd+1].first)*(V[pos][end].first-V[pos+1][midd+1].first)+(V[pos][end].second-V[pos+1][midd+1].second)*(V[pos][end].second-V[pos+1][midd+1].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos+1][midd+1].first,V[pos+1][midd+1].second)];
         } 
      } 
      if(midd+2<V[pos+1].size())
      {
         if(euk>sqrt((V[pos][end].first-V[pos+1][midd+2].first)*(V[pos][end].first-V[pos+1][midd+2].first)+(V[pos][end].second-V[pos+1][midd+2].second)*(V[pos][end].second-V[pos+1][midd+2].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos+1][midd+2].first)*(V[pos][end].first-V[pos+1][midd+2].first)+(V[pos][end].second-V[pos+1][midd+2].second)*(V[pos][end].second-V[pos+1][midd+2].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos+1][midd+2].first,V[pos+1][midd+2].second)];
         } 
      }                      
     }
     //prllf("hhkhj %d\n",pos);
     if(pos!=1)
     {

      ll tockay=V[pos][end].second;
      ll low=0;
      ll high=V[pos-1].size();
      ll midd=0;
      while(low<=high)
      {
         midd=(low+high)/2;
         if(V[pos-1][midd].second>tockay)high=midd-1;
         else low=midd+1;
      }
      if(euk>sqrt((V[pos][end].first-V[pos-1][midd].first)*(V[pos][end].first-V[pos-1][midd].first)+(V[pos][end].second-V[pos-1][midd].second)*(V[pos][end].second-V[pos-1][midd].second)))
      {
        euk=sqrt((V[pos][end].first-V[pos-1][midd].first)*(V[pos][end].first-V[pos-1][midd].first)+(V[pos][end].second-V[pos-1][midd].second)*(V[pos][end].second-V[pos-1][midd].second));
        toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
        toc2=mapa[make_pair(V[pos-1][midd].first,V[pos-1][midd].second)];
      }
      if(midd-1>=0)
      {
         if(euk>sqrt((V[pos][end].first-V[pos-1][midd-1].first)*(V[pos][end].first-V[pos-1][midd-1].first)+(V[pos][end].second-V[pos-1][midd-1].second)*(V[pos][end].second-V[pos-1][midd-1].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos-1][midd-1].first)*(V[pos][end].first-V[pos-1][midd-1].first)+(V[pos][end].second-V[pos-1][midd-1].second)*(V[pos][end].second-V[pos-1][midd-1].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos-1][midd-1].first,V[pos-1][midd-1].second)];
         } 
      }
      if(midd-2>=0)
      {
         if(euk>sqrt((V[pos][end].first-V[pos-1][midd-2].first)*(V[pos][end].first-V[pos-1][midd-2].first)+(V[pos][end].second-V[pos-1][midd-2].second)*(V[pos][end].second-V[pos-1][midd-2].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos-1][midd-2].first)*(V[pos][end].first-V[pos-1][midd-2].first)+(V[pos][end].second-V[pos-1][midd-2].second)*(V[pos][end].second-V[pos-1][midd-2].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos-1][midd-2].first,V[pos-1][midd-2].second)];
         } 
      }
      if(midd+1<V[pos-1].size())
      {
         if(euk>sqrt((V[pos][end].first-V[pos-1][midd+1].first)*(V[pos][end].first-V[pos-1][midd+1].first)+(V[pos][end].second-V[pos-1][midd+1].second)*(V[pos][end].second-V[pos-1][midd+1].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos-1][midd+1].first)*(V[pos][end].first-V[pos-1][midd+1].first)+(V[pos][end].second-V[pos-1][midd+1].second)*(V[pos][end].second-V[pos-1][midd+1].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos-1][midd+1].first,V[pos-1][midd+1].second)];
         } 
      }
      if(midd+2<V[pos+1].size())
      {
         if(euk>sqrt((V[pos][end].first-V[pos-1][midd+2].first)*(V[pos][end].first-V[pos-1][midd+2].first)+(V[pos][end].second-V[pos-1][midd+2].second)*(V[pos][end].second-V[pos-1][midd+2].second)))
         {
          euk=sqrt((V[pos][end].first-V[pos-1][midd+2].first)*(V[pos][end].first-V[pos-1][midd+2].first)+(V[pos][end].second-V[pos-1][midd+2].second)*(V[pos][end].second-V[pos-1][midd+2].second));
          toc=mapa[make_pair(V[pos][end].first,V[pos][end].second)];
          toc2=mapa[make_pair(V[pos-1][midd+2].first,V[pos-1][midd+2].second)];
         } 
      }
     }
}  
int main()
{
    scanf("%llu",&a);
    for(ll i=0;i<a;++i)
    {
            scanf("%llu%llu",&b,&c);
            niz[i]=make_pair(b,c);
            mapa[make_pair(b,c)]=i;
    }
    sort(niz,niz+a);

    for(ll i=0;i<a;++i)
    {
            if(mapa2[niz[i].first]==0)
            {
              V[pos1].push_back(make_pair(niz[i].first,niz[i].second));
              mapa2[niz[i].first]=pos1;
              mapa3[pos1]=niz[i].first;
              ++pos1;
            }
            else V[pos1].push_back(make_pair(niz[i].first,niz[i].second));
    }
    for(ll i=0;i<pos1;++i)
    {
            for(ll j=0;j<V[i].size();++j)
            {
                    if(j!=0)
                    {
                       if(euk>V[i][j].second-V[i][j-1].second)
                       {
                          euk=V[i][j].second-V[i][j-1].second;
                          toc=mapa[make_pair(mapa3[i],V[i][j].second)];
                          toc2=mapa[make_pair(V[i][j-1].first,V[i][j-1].second)];
                       }
                    }
                    if(j!=V[i].size()-1)
                    {
                       //prllf("%d\n",V[i][j+1].second-V[i][j].second);
                       if(euk>V[i][j+1].second-V[i][j].second)
                       {
                          euk=V[i][j+1].second-V[i][j].second;
                          toc=mapa[make_pair(mapa3[i],V[i][j].second)];
                          toc2=mapa[make_pair(V[i][j+1].first,V[i][j+1].second)];
                       }
                    }
                    binary(i,j);
            }
    }
    printf("%llu %llu %.6lf\n",min(toc,toc2),max(toc,toc2),euk+ + 1e-9);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
typedef pairpar;
typedef long long int ll;
PAR-NIZ〔55000〕;
MAPA2;
MAPA;
MAPA3;
维克托夫[55000];
LLA、b、c、d、e、f;
双euk=1561616;
ll toc=0,toc2=0;
ll pos1=1,pos2;
无效二进制文件(ll pos,ll end)
{
if(possqrt((V[pos][end].first-V[pos+1][midd].first)*(V[pos][end].first-V[pos+1][midd].first)+(V[pos][end].second-V[pos+1][midd.second
{
euk=sqrt((V[pos][end]。first-V[pos+1][midd]。first)*(V[pos][end]。first-V[pos+1][midd]。first)+(V[pos][end]。second-V[pos+1][midd second 2]);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos+1][midd]。第一,V[pos+1][midd]。第二)];
}
如果(midd-1>=0)
{
if(euk>sqrt((V[pos][end].first-V[pos+1][midd-1].first)*(V[pos][end].first-V[pos+1][midd-1].first)+(V[pos][end].second V[pos+1][midd 1].second)
{
euk=sqrt((V[pos][end]。first-V[pos+1][midd-1]。first)*(V[pos][end]。first-V[pos+1][midd-1]。first)+(V[pos][end]。second-V[pos+1][midd-1]。second)*(V[pos end][end]。second V[pos 1][midd 1]。second));
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos+1][midd-1]。第一,V[pos+1][midd-1]。第二)];
} 
}
如果(midd-2>=0)
{
if(euk>sqrt((V[pos][end].first-V[pos+1][midd-2].first)*(V[pos][end].first-V[pos+1][midd-2].first)+(V[pos][end].second V[pos+1][midd 2].second)
{
euk=sqrt((V[pos][end]。first-V[pos+1][midd-2]。first)*(V[pos][end]。first-V[pos+1][midd-2]。first)+(V[pos][end]。second-V[pos+1][midd-2]。second)*(V[pos end][end]。second V[pos 1][midd 2]。second);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos+1][midd-2]。第一,V[pos+1][midd-2]。第二)];
} 
}
if(midd+1sqrt((V[pos][end].first-V[pos+1][midd+1].first)*(V[pos][end].first-V[pos+1][midd+1].first)+(V[pos][end].second V[pos+1][midd 1].second
{
euk=sqrt((V[pos][end]。first-V[pos+1][midd+1]。first)*(V[pos][end]。first-V[pos+1][midd+1]。first)+(V[pos][end]。second-V[pos+1][midd 1]。second)*(V[pos end][end]。second V[pos 1][midd 1]。second);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos+1][midd+1]。第一,V[pos+1][midd+1]。第二)];
} 
} 
if(midd+2sqrt((V[pos][end].first-V[pos+1][midd+2].first)*(V[pos][end].first-V[pos+1][midd+2].first)+(V[pos][end].second V[pos+1][midd 2].second
{
euk=sqrt((V[pos][end]。first-V[pos+1][midd+2]。first)*(V[pos][end]。first-V[pos+1][midd+2]。first)+(V[pos][end]。second-V[pos+1][midd 2]。second)*(V[pos end][end]。second V[pos 1][midd 2]。second);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos+1][midd+2]。第一,V[pos+1][midd+2]。第二)];
} 
}                      
}
//prllf(“hhkhj%d\n”,pos);
如果(位置!=1)
{
ll tockay=V[pos][end]。第二;
ll低=0;
ll high=V[pos-1]。大小();
ll midd=0;
而(lowtockay)高=midd-1;
否则低=midd+1;
}
if(euk>sqrt((V[pos][end].first-V[pos-1][midd].first)*(V[pos][end].first-V[pos-1][midd].first)+(V[pos][end].second-V[pos-1][midd.second
{
euk=sqrt((V[pos][end]。first-V[pos-1][midd]。first)*(V[pos][end]。first-V[pos-1][midd]。first)+(V[pos-1][end]。second-V[pos-1][midd second 2]);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos-1][midd]。第一,V[pos-1][midd]。第二)];
}
如果(midd-1>=0)
{
if(euk>sqrt((V[pos][end].first-V[pos-1][midd-1].first)*(V[pos][end].first-V[pos-1][midd-1].first)+(V[pos][end].second V[pos-1][midd 1].second
{
euk=sqrt((V[pos][end]。first-V[pos-1][midd-1]。first)*(V[pos][end]。first-V[pos-1][midd-1]。first)+(V[pos][end]。second-V[pos-1][midd-1]。second)*(V[pos end][end]。second V[pos 1][midd 1]。second));
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos-1][midd-1]。第一,V[pos-1][midd-1]。第二)];
} 
}
如果(midd-2>=0)
{
if(euk>sqrt((V[pos][end].first-V[pos-1][midd-2].first)*(V[pos][end].first-V[pos-1][midd-2].first)+(V[pos][end].second V[pos-1][midd 2].second
{
euk=sqrt((V[pos][end]。first-V[pos-1][midd-2]。first)*(V[pos][end]。first-V[pos-1][midd-2]。first)+(V[pos][end]。second-V[pos-1][midd-2]。second)*(V[pos end][end]。second V[pos 1][midd 2]。second);
toc=mapa[make_pair(V[pos][end]。第一,V[pos][end]。第二)];
toc2=mapa[make_pair(V[pos-1][midd-2]。第一,V[pos-1][midd-2]。第二)];
} 
}
if(midd+1sqrt((V[pos][end].first-V[pos-1][midd+1].first)*(V[pos][end].first-V[pos-1][midd+1].first)+(V[pos-1][end].second V[pos-1][midd 1].second)
{
euk=sqrt((V[pos][end])。第一个-V