水题。。。但是研究了半天
最后发现是这样排序的,两个项目进行排序,哪一个代价小,哪一个放前面
#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; }
时间: 2024-11-13 16:33:52