这道题要注意细节,很容易出错.根据函数y=x+c;y=-x+c;用两个哈希表统计同一条直线的点数,然后再用一个循环找出现最多的点,同时要注意两条公路重合的地方,写一个max_num函数来统计。 代码如下:
using namespace std;
int n;
vector<int> x,y;
unordered_map<int,int> mp1,mp2;
int ans=0;
int max_num(int a,int b){
int cnt=0;
for(int i=0;i<n;++i){
if(y[i]-x[i]==a||y[i]+x[i]==b){
cnt++;
}
}
return cnt;
}
signed main()
{
cin>>n;
x.resize(n);y.resize(n);
for(int i=0;i<n;++i)cin>>x[i];
for(int i=0;i<n;++i)cin>>y[i];
for(int i=0;i<n;++i){
mp1[y[i]-x[i]]++;
mp2[y[i]+x[i]]++;
}
for(auto it1=mp1.begin();it1!=mp1.end();++it1){
for(auto it2=mp2.begin();it2!=mp2.end();++it2){
ans=max(ans,max_num(it1->first,it2->first));
}
}
cout<<ans;
return 0;
}

京公网安备 11010502036488号