洛谷P5174 圆点

关于赛题#B 圆点

  • 可能是某场比赛最水的一道题了

25pts:

暴力。

该圆的方程可以写为(x^2+y^2=r)

我们枚举x、y,如果权值小于r,答案+=权值。


50pts:

其实我也不知道怎么做


80pts:

我们可以枚举(0~sqrt{r})内的整数横坐标(记为x),算出最大满足题意的纵坐标(记为y)。

原来我们要求的(x^2 imes 1^2+x^2 imes 2^2+x^2 imes 3^2+ldots +x^2 imes maxy^2)

用乘法分配律,原式(=x^2 imes (1^2+2^2+3^2+ldots +maxy^2))

根据小学奥数的知识,(1^2+2^2+3^2+ldots +n^2=frac{1}{6}n(n+1)(2n+1)),然后代到上面的式子里,就可以算了。

这算的是一个象限的,最后还要乘4。qaq

别忘记随时取模,防溢出。

然后你愉快地WA了4个点。


85pts:

解决方法:#define int long long

然后你会发现这玩意儿不管用诶!!!

正确方法:#define int __int128

成功TLE了3个点,真刺激。

哦,对了,如果你CE了,int main()应改为signed main()


100pts:

毒瘤数论需卡常……orz

先是用了编译优化……TLE

后来才发现……

膜运算不能太多,因为是大数据类型,适当地膜就行咯qaq(当然也不能只到最后才膜一下。。。)

code:

#include <bits/stdc++.h>
#define int __int128

#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")

const int mod = 1e9 + 7;

using namespace std;

int read() {
	int tmp = 0;
	char c = getchar();
	while(!isdigit(c)) c = getchar();
	while(isdigit(c)) tmp = (tmp << 1) + (tmp << 3) + c - 48, c = getchar();
	return tmp;
}

void write(int x) {
	if(x > 9) write(x / 10);
	putchar(x % 10 + 48);
} 

signed main() {
	int r = read();
	int ans = 0;
	for(int i = 0; i * i <= r; i++) {
		int n = sqrt((double)(r - i * i));
		// cout << n << " ";
		ans += i * i * n + (n * (n + 1) * (2 * n + 1) / 6);
		ans %= mod;
	}
	write(ans * 4 % mod);
	return 0;
}
原文地址:https://www.cnblogs.com/iycc/p/10216967.html