数学 #计数 #容斥
分为 \(4\) 个部分计算
- 上面的按奇偶性分类
- 下面的按每一层容斥,即 \(siz_i-2\times siz_{i-1}+siz_{i-2}\)
- 左右直接对每一块计算面积
// Author: xiaruize
const int INF = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1000000007;
const int N = 2e5 + 10;
int n;
double res = 0;
double calc(int i)
{
return (double)i / ((double)n + (double)i) * (double)i / 2.0;
}
void solve()
{
cin >> n;
for (int i = 2; i <= n; i += 2)
{
res = res + (double)(n - i + 1) * (calc(i) - calc(i - 1) * 2 + calc(i - 2));
}
// debug(res);
rep(i, 1, (n + 1) / 2)
{
res += ((double)n / 4) * (((double)(i * 2 - 1) / ((double)n + (double)(i * 2 - 1)) - (double)(i * 2 - 2) / ((double)n + (double)(i * 2 - 2)))) * 2.0 * 2.0;
}
if (n % 2 == 0)
res += (double)n / 4.0;
cout << (int)floor(res) << endl;
}
#ifndef ONLINE_JUDGE
bool end_of_memory_use;
#endif
signed main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int testcase = 1;
// cin >> testcase;
while (testcase--)
solve();
#ifndef ONLINE_JUDGE
cerr << "Memory use:" << (&end_of_memory_use - &start_of_memory_use) / 1024.0 / 1024.0 << "MiB" << endl;
cerr << "Time use:" << (double)clock() / CLOCKS_PER_SEC * 1000.0 << "ms" << endl;
#endif
return 0;
}
标签:const,P4139TriangleXor,siz,容斥,int,double
From: https://www.cnblogs.com/xiaruize/p/18121247