社区讨论
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 条回复,欢迎继续交流。
正在加载回复...