• 洛谷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;
    }
    
  • 相关阅读:
    Android View体系(七)从源码解析View的measure流程
    Android View体系(六)从源码解析Activity的构成
    Android View体系(五)从源码解析View的事件分发机制
    Android View体系(四)从源码解析Scroller
    Android常用学习网站
    Android View体系(三)属性动画
    购物车
    模块与包
    s5_day9作业
    s5_day11作业
  • 原文地址:https://www.cnblogs.com/iycc/p/10216967.html
Copyright © 2020-2023  润新知