田地丈量
本题注意一下两点即可:
- 作为CSP第一题,肯定是签到,不可能过于麻烦,本菜鸡在考场上分类讨论了一个多小时,直接自闭。本题只需要通过考虑 x 1 , x 2 , y 1 , y 2 x_1,x_2,y_1,y_2 x1,x2,y1,y2 和边界取 m i n , m a x min,max min,max 即可。
- 注意 y 1 y_1 y1不能声明为全局变量,C++14编译器会报错,痛啊,考场上分类讨论半天,再加上这个错误,真的心态裂开。
#include <iostream>
using namespace std;
int main()
{
int x1, y1, x2, y2;
int n, a, b;
cin >> n >> a >> b;
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> x1 >> y1 >> x2 >> y2;
if (x1 >= a)
continue;
else
x1 = max(x1, 0);
if (y1 >= b)
continue;
else
y1 = max(0, y1);
if (y2 <= 0)
continue;
else
y2 = min(y2, b);
if (x2 <= 0)
continue;
else
x2 = min(x2, a);
sum += (y2 - y1) * (x2 - x1);
}
cout << sum;
return 0;
}
垦田计划
二分答案,直接对天数进行二分
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int t[N], c[N];
int n, m, k;
bool check(int x)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
if(t[i]>=x)
sum +=(t[i] - x) * c[i];
}
if (sum > m)
return false;
else
return true;
}
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < n; i++)
{
cin >> t[i] >> c[i];
}
int l = k-1, r = N;
while (l + 1!= r)
{
int mid = (l + r) / 2;
if (check(mid))
r = mid;
else
l = mid;
//cout << l << " " << r << endl;
}
cout << r;
}