列表

详情


NC219608. 圆的交点

描述

相信同学们已经会求圆和圆交点的个数了。
在二维平面上,我们以每个为圆心,为半径,做个圆,求这些圆交点的个数有多少个?
由于答案可能过大,请输出取模后的结果。

输入描述

第一行输入一个正整数表示测试组数。
接下来行每行两个正整数表示的范围。

输出描述

每行输出一个数表示对取模后的结果。

示例1

输入:

5
1 1
2 2
3 2
823 12394
1000000000 1000000000

输出:

12
33
46
51040962
204

说明:

1 1的样例如下图:

2 2的样例如下图:

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 59ms, 内存消耗: 1400K, 提交时间: 2021-03-20 20:24:44

#include<stdio.h>
#define INF 1000000007
int main()
{
	long long int t,a,b,ans;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&a,&b);
		ans=2*a*(b+1)+2*b*(a+1)+(a+1)*(b+1);
		printf("%lld\n",ans%INF);
	}
}

C(clang11) 解法, 执行用时: 63ms, 内存消耗: 1288K, 提交时间: 2021-03-20 20:59:08

#include<stdio.h>
int main()
{
	long long int n,a,b,t;
	scanf("%lld",&n);
	while(n--)
	{
		scanf("%lld%lld",&a,&b);
		t=a*b*4+(a+1)*(b+1)+a*2+b*2;
		printf("%lld\n",t%1000000007);
	}
	return 0;
 } 

Python3(3.9) 解法, 执行用时: 583ms, 内存消耗: 5684K, 提交时间: 2021-03-21 10:13:43

t = int(input())
MOD = 1000000007

for _ in range(t):
    x, y = map(int, input().split())
    print(((x+y)*2+(x+1)*(y+1)+4*x*y)%MOD)

上一题