zoukankan      html  css  js  c++  java
  • 洛谷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;
    }
    
  • 相关阅读:
    算法笔记--中国剩余定理
    算法笔记--辛普森积分公式
    算法笔记--数学之不定方程解的个数
    算法笔记--卢卡斯定理
    洛谷 P3808 【模板】AC自动机(简单版)洛谷 P3796 【模板】AC自动机(加强版)
    hihocoder #1419 : 后缀数组四·重复旋律4
    codevs 3044 矩形面积求并 || hdu 1542
    Stamps ans Envelope Sive UVA
    洛谷 P2061 [USACO07OPEN]城市的地平线City Horizon
    bzoj 3277: 串
  • 原文地址:https://www.cnblogs.com/iycc/p/10216967.html
Copyright © 2011-2022 走看看