如果限定矩形的边长必须为整数,且周长为定值L,那么面积在[A, B]范围内不同的矩形一共有多少个呢?
在这个问题中,当且仅当两个矩形面积不同时,视作是两个不同的矩形。
输入数据的第一行包含一个整数T (1 <= T <= 10000),表示接下来一共有T组测试数据。
对于每组测试数据,包含三个整数L (1 <= L <= 2,000,000,000)、A、B (1 <= A <= B <= 250,000,000,000,000,000),含义同上。
对于每组测试数据,用一行输出一个整数,代表上述问题的答案。
311 1 612 5 1012 8 10
032
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1204
题目分析:二分出小于a的最小边的最大值和小于等于b的最小边的最大值,两个一减就行了
#include <cstdio> #include <algorithm> #define ll long long using namespace std; int main() { int T; scanf("%d", &T); while(T --) { ll l, a, b; scanf("%lld %lld %lld", &l, &a, &b); if(l & 1) { printf("0\n"); continue; } ll c = l >> 1; ll le = 1, ri = c >> 1; ll num1 = 0, num2 = 0; while(le <= ri) { ll mid = (le + ri) >> 1; if(mid * (c - mid) < a) { num1 = max(num1, mid); le = mid + 1; } else ri = mid - 1; } le = 1; ri = c >> 1; while(le <= ri) { ll mid = (le + ri) >> 1; if(mid * (c - mid) <= b) { num2 = max(num2, mid); le = mid + 1; } else ri = mid - 1; } printf("%lld\n", num2 - num1); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/tc_to_top/article/details/47663633