zoukankan      html  css  js  c++  java
  • 洛谷P2878 [USACO07JAN]保护花朵Protecting the Flowers

    洛谷P2878 [USACO07JAN]保护花朵Protecting the Flowers

    贪心

     这题的话 如果研究一下相邻的两个 看看交换的结果就好 好像是一种很经典的方法啊、、

    如果x后拿的多一点 2Tx*Dy<=2Ty*Dx 所以当Dy/Ty<=Dx/Tx时 x应该在y前面被拿

    排序一下就好了

     1 #include <cstdio> 
     2 #include <cmath>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <iostream> 
     6 #include <iomanip> 
     7 #include <string> 
     8 #include <algorithm> 
     9 #define LL long long 
    10 #define For(i,j,k) for(int i=j;i<=k;i++) 
    11 #define Dow(i,j,k) for(int i=j;i>=k;i--) 
    12 using namespace std ;  
    13 
    14 const int N = 100011 ; 
    15 const double eps = 1e-7 ; 
    16 struct node{
    17     int T,D ; 
    18 }a[N];
    19 int n,sum ; 
    20 LL ans ; 
    21 
    22 inline int read() 
    23 {
    24     int x = 0 , f = 1 ; 
    25     char ch = getchar() ; 
    26     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar(); } 
    27     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar(); } 
    28     return x * f ; 
    29 }
    30 
    31 inline bool cmp(node a,node b) 
    32 {
    33     if(fabs(1.0*a.T/a.D-1.0*b.T/b.D)>eps)  //  注意要特判比值相等的情况 
    34         return 1.0*a.T/a.D < 1.0*b.T/b.D ; 
    35     return a.T < b.T ; 
    36 }
    37 
    38 int main() 
    39 {
    40     n = read() ; 
    41     For(i,1,n) a[i].T=read() , a[i].D=read(),sum+=a[i].D ; 
    42     sort(a+1,a+n+1,cmp) ; 
    43     
    44     For(i,1,n) {
    45         sum-=a[i].D ; 
    46         ans=ans+2*a[i].T*sum ; 
    47     }
    48     printf("%lld
    ",ans) ; 
    49     return 0 ; 
    50 }
  • 相关阅读:
    服务端获取实际IP工具类
    vue-element-admin整合服务端代理api
    elemengui分页
    vue获取浏览器地址栏参数
    el-table-column动态判断显示性别男女
    nginx代理静态页面添加二级目录
    nginx配置代理指向Redis
    SpringBoot整合Redis日志反复提示Redis重连问题
    centos7安装Redis
    nohup启动jar包
  • 原文地址:https://www.cnblogs.com/third2333/p/7623696.html
Copyright © 2011-2022 走看看