Sorting(sort排序)

题目链接:http://exam.upc.edu.cn/problem.php?id=7039

题意:根据式子进行排序。


其实要是直接弄的话,精度出现问题。

所以需要化简一下:交叉相乘再变化一下。

最后化成        a1×c2    +    b1×c2    <=    a2×c1    +    b2×c1

其实这样已经可以了。

因为很可能出现爆,所以需要long long    或者long double.

这题就完成了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef struct point{
    ll a,b,c;
    int No;
}p;
p node[10050];
int cmp(p x,p y){
    if((x.a+x.b)*y.c==x.c*(y.a+y.b))
        return x.No<y.No;

    return (x.a+x.b)*y.c<x.c*(y.a+y.b);
}
int main()
{
    int n;
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++){
            scanf("%lld%lld%lld",&node[i].a,&node[i].b,&node[i].c);
            node[i].No=i;
        }
        sort(node+1,node+1+n,cmp);
        for(int i=1;i<=n;i++){
            printf("%d%c",node[i].No,i==n?'\n':' ');
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的sort函数是用来对数组进行排序的函数。它是标准库函数,位于头文件<stdlib.h>中。 sort函数的原型如下: ```c void sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); ``` 其中,参数说明如下: - base:指向要排序的数组的第一个元素的指针。 - nmemb:要排序的元素个数。 - size:每个元素的大小(以字节为单位)。 - compar:用来比较两个元素的函数指针。 比较函数的原型如下: ```c int cmpfunc(const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } ``` 其中,参数说明如下: - a:指向第一个要比较的元素的指针。 - b:指向第二个要比较的元素的指针。 比较函数必须返回一个整数值,表示两个元素之间的大小关系。如果返回值小于0,则表示第一个元素应该排在第二个元素之前;如果返回值大于0,则表示第一个元素应该排在第二个元素之后;如果返回值等于0,则表示两个元素相等,它们的相对位置不变。 例如,下面的代码演示了如何使用sort函数对一个整型数组进行排序: ```c #include <stdio.h> #include <stdlib.h> int cmpfunc(const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int main () { int arr[] = {10, 5, 8, 1, 7}; int n = sizeof(arr)/sizeof(arr[0]); int i; printf("Before sorting:\n"); for(i = 0; i < n; i++) { printf("%d ", arr[i]); } // 使用sort函数对数组进行排序 qsort(arr, n, sizeof(int), cmpfunc); printf("\nAfter sorting:\n"); for(i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; } ``` 输出结果为: ``` Before sorting: 10 5 8 1 7 After sorting: 1 5 7 8 10 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值