• 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. }

  • 相关阅读:
    2022网安保研经验帖
    2023年最新软件安装管家目录
    C++类模板实例化与专门化
    SpringBoot2.0(过滤器,监听器,拦截器)
    数据分析 - 函数专题
    RabbitMQ安装
    带433遥控紫外线照明灯触摸芯片-DLT8SA20A-杰力科创
    mssql调用外部接口
    GBase 8c 核心技术
    React/RN组件避免重复渲染的一些技巧
  • 原文地址:https://blog.csdn.net/qq_63739337/article/details/126330332