社区讨论

How ABC D

学术版参与者 7已保存回复 17

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
16 条
当前快照
1 份
快照标识符
@m628njiq
此快照首次捕获于
2025/01/18 21:42
去年
此快照最后确认于
2025/11/04 23:12
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define ld long double
int r, sum;
ld ox = 0.5, oy = 0.5;
ld dis(ld ax, ld ay, ld bx, ld by)
{
	return sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
}
int edge(int row)
{
	if(row == 0)return 2*r-1;
	int lft = 0, rgt = r;
	while(lft < rgt)
	{
		int col = lft+rgt >> 1;
		ld nx = row+1, ny = col+1;
		if(dis(ox, oy, nx, ny)-r > 0.000000001)rgt = col-1;
		else lft = col+1;
	}
	return lft;
}
signed main()
{
	cin >> r;
	for(int i = 0;i <= r-1;i++)
		if(edge(i) == 0)sum += 2;
		else sum += 2*edge(i)-1; 
	cout << sum;
	return 0;
}
是这样吗?有什么问题?

回复

17 条回复,欢迎继续交流。

正在加载回复...