目录
1.城市修建
读懂题目,因为是正方形,所以我们分别找横纵坐标最大最小之差平方即可。
注意大数陷阱,真阴,把int换成long即可AC
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
long N;
cin>>N;
long a,b;
vector<long> width,height;
for(long i=0;i<N;i++){
cin>>a>>b;
width.push_back(a);
height.push_back(b);
}
sort(width.begin(),width.end());
sort(height.begin(),height.end());
long m = width[width.size()-1]-width[0];
long n = height[height.size()-1]-height[0];
long c = max(m,n);
cout<<c*c<<endl;
return 0;
}
2.圈地运动
我一开始的思路看前n-1个数之和是否大于第n个数
后来想想不对,应该是前n中最大的数和剩下n-1个数之和做比较
所以只对了60%
#include <iostream>
#include <vector>
using namespace std;
int main(){
long n;
cin>>n;
long a[n];
long b;
vector<long> v;
for(long i=0;i<n;i++){
cin>>b;
v.push_back(b);
}
a[0] = v[0];
a[1] = a[0]+v[1];
bool flag = true;
for(long i=2;i<n;i++){
a[i]=v[i]+a[i-1];
if(v[i]<a[i-1]){
flag = false;
cout<<(i+1)<<endl;
break;
}
}
if(flag)
cout<<-1<<endl;
return 0;
}
3.看花
卡在大数超时上,只对了55%
暂时没想到怎么改进
#include <iostream>
#include <vector>
#include <set>
using namespace std;
typedef long long ll;
int main(){
ll n,m;
cin>>n>>m;
ll temp;
vector<ll> a;
for(ll i=0;i<n;i++){
cin>>temp;
a.push_back(temp);
}
ll Q;
cin>>Q;
ll l,r;
for(ll i=0;i<Q;i++){
cin>>l>>r;
l--;r--;
set<ll> s;
for(ll j=l;j<=r;j++){
s.insert(a[j]);
}
cout<<s.size()<<endl;
}
return 0;
}
满打满算只AC了三分之一的题,前19%,可能再AC一题能进面试吧
后面两道DP……蛋疼