• ZCMU--5085: ly的圆


    Description

    ly 画了一个坐标系,里面有 n 个点,第 i 个点的坐标为 (xi,yi),现在她准备以 (0,0) 为圆心,画 n 个圆,每个圆会分别经过 n 个点中的一个。

    现在 ly 希望从小到大画这些圆,所以她会先画半径最小的,再画半径第二小的...

    当 ly 画第 i 个圆,这个圆经过的点编号为 j 时,她画这个圆需要花费的颜料消耗为这个 圆的半径2 * (i + j)

    现在她希望知道她画完这 n 个圆需要消耗多少颜料

    Input

    输入两行,第一行包含一个正整数 n (1 <= n <= 10^5),表示点数。

    接下来 n 行,每行包含两个整数 (xi,yi)(1 <= xi,yi <= 10^6) 表示第 i 个点的坐标,保证任意两点离原点的距离不同

    Output

    输出一行,为一个整数,为所求的答案。

    由于答案可能很大,只需要输出答案对 1000000007 取模的结果即可

    Sample Input

    3

    1  2

    1  3

    2  2

    Sample Output

    100

    解析:结构体排序即可,结构体直接存R^2即可,因为计算反正是R^2,开方算出R再平方可能失精度。

    1. #include
    2. #include
    3. using namespace std;
    4. struct s
    5. {
    6. long long rf,id;//保存R^2和对应编号
    7. bool operator<(const s&x)const{
    8. return rf//按照R^2从小到大排序
    9. }
    10. }a[100005];
    11. int main()
    12. {
    13. int n,i;
    14. long long x,y,s=0;
    15. scanf("%d",&n);
    16. for(i=1;i<=n;i++) scanf("%lld%lld",&x,&y),a[i].rf=x*x+y*y,a[i].id=i;
    17. sort(a+1,a+n+1);
    18. for(i=1;i<=n;i++) s=(s+a[i].rf*(i+a[i].id))%1000000007;//边算边取模
    19. printf("%lld\n",s);
    20. return 0;
    21. }

  • 相关阅读:
    Nginx虚拟主机的搭建 基于ip 基于端口 基于域名
    nlp学习笔记
    智能宠物喂食器方案软硬件设计
    一门能让你五分钟学会的语言-Brainfuck
    SpringBoot 2 配置文件 2.5 配置文件分类
    XAML标记扩展(3)
    QT day5
    力扣 -- 376. 摆动序列
    gitlab配置hook,commit message的时候校验提交的信息
    hive往es映射表写数据报错
  • 原文地址:https://blog.csdn.net/qq_63739337/article/details/126330332