第一题:一般都是考察你思维能力的数学题,不要想得那么困难,找规律就好了
#include<iostream>
#include<algorithm>
using namespace std;
int x1,x2,y1,y2;
int main(){
int n,a,b;
cin >> n >> a >> b;
int sum = 0;
for(int i = 0;i < n; i++){
cin >> x1 >> y1 >> x2 >> y2;
if(x2 <= 0 || x1 >= a || y1 >= b || y2 <= 0) sum += 0;
else{
sum += (min(x2,a) - max(x1,0)) * (min(y2,b) - max(0,y1));
}
}
cout << sum;
return 0;
}
第二题:用到了算法?可能是散列,或者就是我们常用到的一种思想,代码如下
#include<iostream>
using namespace std;
const int maxn = 1000010;
int jl[maxn] = {0};
int main() {
int n,m,k; //待开垦数,资源数,每块区域的最少开垦天数
cin >> n >> m >> k;
for(int i = 0; i < n; i++) {
int a,b;
cin >> a >> b;
jl[a] += b;
}
for(int i = maxn; i >= 0; i--) {
if(jl[i] > 0 && m >= jl[i]) {
m -= jl[i];
jl[i-1] += jl[i];
jl[i] = 0;
}
}
for(int i = maxn; i >= 0; i--) {
if(jl[i] > 0 && i > k) {
cout << i;
break;
}
if(i == k){
cout << k;
break;
}
}
return 0;
}