HDU 4442 Physical Examination

水题。。。但是研究了半天

最后发现是这样排序的,两个项目进行排序,哪一个代价小,哪一个放前面

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <string>
using namespace std;

const int maxn=100000+10;
struct X
{
    long long a;
    long long b;
} s[maxn];
int n;

long long mod=31536000;

bool cmp(const X&a,const X&b)
{
    return (a.a+a.a*b.b+b.a)<(b.a+b.a*a.b+a.a);
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(!n) break;
        for(int i=1; i<=n; i++)
            scanf("%lld %lld",&s[i].a,&s[i].b);
        long long sum=0;
        sort(s+1,s+1+n,cmp);
        for(int i=1; i<=n; i++)
        {
            long long ai=s[i].a;
            long long bi=s[i].b;
            sum=(sum+((sum*bi)%mod+ai)%mod)%mod;
        }
        printf("%lld\n",sum);
    }
    return 0;
}

 

你可能感兴趣的:(HDU 4442 Physical Examination)