problem link:这里喽! 题意:给你n个矩阵的左下角坐标和右上角坐标。让你求出n-1个矩形中都包含有的那个点的坐标。 一开始用的暴力,然后超内存了。喏,第一个是超内存的代码。然后呢,其中一个正解就是:去掉当前的矩形,判断剩下的左下角的所有左端点要小于右上角的所有右端点,同理判断纵坐标即可。
#include<bits/stdc++.h>
using namespace std ;
const int N=132676 ;
map <pair<int ,int > ,int >mp;
int main(){
ios::sync_with_stdio(false );cin .tie(0 );
int n;cin >>n;
for (int i=1 ;i<=n;i++){
int a,b,x,y;cin >>a>>b>>x>>y;
for (int i=a;i<=x;i++)
for (int j=b;j<=y;j++)mp[make_pair(i,j)]++;
}
map <pair<int ,int > ,int >::reverse_iterator it=mp.rbegin();
while (it!=mp.rend()){
if ((*it).second>=n-1 ){
cout <<(*it).first.first<<" " <<(*it).first.second<<endl;break ;
}
it++;
}
}
#include<bits/stdc++.h>
using namespace std ;
const int N=155555 ;
int a[N][4 ],n;
multiset <int > s[4 ];
int main(){
cin >>n;
for (int i=0 ;i<n;i++)
for (int j=0 ;j<4 ;j++)cin >>a[i][j],s[j].insert(a[i][j]);
for (int i=0 ;i<n;i++){
for (int j=0 ;j<4 ;j++)s[j].erase(s[j].find(a[i][j]));
if (*s[0 ].rbegin()<=*s[2 ].begin()&&*s[1 ].rbegin()<=*s[3 ].begin()){
cout <<*s[0 ].rbegin()<<" " <<*s[1 ].rbegin()<<endl;break ;
}
for (int j=0 ;j<4 ;j++)s[j].insert(a[i][j]);
}
}