5 条题解

  • 4
    @ 2023-12-19 19:29:34

    直接奉上代码

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    struct T { int money,id; } ;
    bool cmp(T a,T b) { return a.money < b.money; }
    int n,b[200005],c1[200005],c2[200005],rk[200005];
    T a[200005];
    int main()
    {
        cin >> n;
        for(int i = 1;i <= n+1;i++) cin >> a[i].money,a[i].id = i;
        for(int i = 1;i <= n;i++) cin >> b[i];
        sort(a+1,a+n+1+1,cmp);
        sort(b+1,b+n+1);
        for(int i = 1;i <= n;i++)
            c1[i] = c1[i-1] + max(a[i].money-b[i],0);
        for(int i = n+1;i >= 1;i--)
            c2[i] = c2[i+1] + max(a[i].money-b[i-1],0);
        for (int i = 1;i <= n+1;i++)
            rk[a[i].id] = i;
        for (int i = 1;i <= n+1;i++)
            cout << c1[rk[i]-1] + c2[rk[i]+1] << " ";
        return 0;
    }
    
    • 2
      @ 2024-6-4 21:36:49

      @洋葱头极限压缩流解密:

      已AC

      #include <iostream>
      #include <cstring>
      #include <algorithm>
      using namespace std;
      struct T
      {
         int money;
         int id;
      };
      bool cmp(T a,T b)
      {
         return a.money < b.money;
      }
      int main(void)
      {
         register int n,*b,*c1,*c2,*rk;
         register T *a;
         cin >> n;
         a = new T[n+3];
         b = new int[n+3];
         c1 = new int[n+3];
         memset(c1,0,(n+3)*sizeof(int));
         c2 = new int[n+3];
         memset(c2,0,(n+3)*sizeof(int));
         rk = new int[n+3];
         for(register int i = 1;i <= n+1;i++)
         {
            cin >> a[i].money;
            a[i].id = i;
         }
         for(register int i = 1;i <= n;i++)
            cin >> b[i];
         sort(a+1,a + n + 1 + 1,cmp);
         sort(b + 1,b + n + 1);
         for(register int i = 1;i <= n;i++)
            c1[i] = c1[i-1]  + max(a[i].money-b[i],0);
         for(register int i=n+1;i >= 1;i--)
            c2[i] = c2[i+1] + max(a[i].money-b[i-1],0);
         for (register int i = 1;i <= n+1;i++)
            rk[a[i].id] = i;
         for (register int i = 1;i <= n+1;i++)
            cout << c1[rk[i]-1] + c2[rk[i]+1] << ' ';
         delete a;delete c1;delete c2;
         return 0;
      }
      
      • 0
        @ 2024-5-3 11:39:45

        极限压缩流,四行

        #include <iostream>
        #include <cstring>
        #include <algorithm>
        using namespace std;struct T{int money;int id;};bool cmp(T a,T b){return a.money<b.money;}int main(void){register int n,*b,*c1,*c2,*rk;register T *a;cin>>n;a=new T[n+3];b=new int[n+3];c1=new int[n+3];memset(c1,0,(n+3)*sizeof(int));c2=new int[n+3];memset(c2,0,(n+3)*sizeof(int));rk=new int[n+3];for(register int i=1;i<=n+1;i++){cin>>a[i].money;a[i].id=i;}for(register int i=1;i<=n;i++)cin>>b[i];sort(a+1,a+n+1+1,cmp);sort(b+1,b+n+1);for(register int i=1;i<=n;i++)c1[i]=c1[i-1]+max(a[i].money-b[i],0);for(register int i=n+1;i>=1;i--)c2[i]=c2[i+1]+max(a[i].money-b[i-1],0);for (register int i=1;i<=n+1;i++)rk[a[i].id]=i;for (register int i=1;i<=n+1;i++)cout<<c1[rk[i]-1]+c2[rk[i]+1]<<' ';delete a;delete c1;delete c2;return 0;}
        
        • @ 2024-6-4 21:29:36

          极限压缩流,乱码

          #include <iostream>#i n扸c lu同d e   < c s trin g >#i n clude <algorithm >using nam espace std 0;正果  str0  01ughct   T1hkl;{1zfint money;int id;};bool cmp(T a,T b){return a.money<b.money;}int main(void){register int n,*b,*c1,*c2,*rk;register T *a;cin>>n;a=new T[n+3];b=new int[n+3];c1=new int[n+3];memset(c1,0,(n+3)*sizeof(int));c2=new int[n+3];memset(c2,0,(n+3)*sizeof(int));rk=new int[n+3];for(register int i=1;i<=n+1;i++){cin>>a[i].money;a[i].id=i;}for(register int i=1;i<=n;i++)cin>>b[i];sort(a+1,a+n+1+1,cmp);sort(b+1,b+n+1);for(register int i=1;i<=n;i++)c1[i]=c1[i-1]+max(a[i].money-b[i],0);for(register int i=n+1;i>=1;i--)c2[i]=c2[i+1]+max(a[i].money-b[i-1],0);for (register int i=1;i<=n+1;i++)rk[a[i].id]=i;for (register int i=1;i<=n+1;i++)cout<<c1[rk[i]-1]+c2[rk[i]+1]<<' ';delete a;delete c1;delete c2;return 0;}
          
      • 0
        @ 2024-4-6 19:48:01
        #include <iostream>
        #include <iomanip>
        #include <stdio.h>
        #include <bits/stdc++.h>
        #include <algorithm>
        #include <cmath>
        #include <string>
        using namespace std;
        struct T { int money,id; } ;
        bool cmp(T a,T b) 
        {
            return a.money < b.money;
        }
        int n,b[200005],c1[200005],c2[200005],rk[200005];
        T a[200005];
        int main()
        {
            cin >> n;
            for(int i = 1;i <= n+1;i++) cin >> a[i].money,a[i].id = i;
            for(int i = 1;i <= n;i++) cin >> b[i];
            sort(a+1,a+n+1+1,cmp);
            sort(b+1,b+n+1);
            for(int i = 1;i <= n;i++)
                c1[i] = c1[i-1] + max(a[i].money-b[i],0);
            for(int i = n+1;i >= 1;i--)
                c2[i] = c2[i+1] + max(a[i].money-b[i-1],0);
            for (int i = 1;i <= n+1;i++)
                rk[a[i].id] = i;
            for (int i = 1;i <= n+1;i++)
                cout << c1[rk[i]-1] + c2[rk[i]+1] << " ";
            return 0;
        }
        
        • 0
          @ 2023-11-28 7:33:45
          1. 统计数组c1和c2,分别记录从前往后或从后往前计算第i个位置的花钱总数。
          a1 a2 a3 a4 a5 a6
          b1 b2 b3 b4 b5

          所以c1[i]从后往前是c1[i-1]+max(a[i]-b[i],0) 所以c2[i]从后往前是c2[i+1]+max(a[i]-b[i-1],0)

          1. 排序a[i]数组
          2. 去掉a[i]的结果:c1[rk[i]-1]+c2[rk[i]+1]

          参考代码:

          #include <iostream>
          #include <cstring>
          #include <algorithm>
          using namespace std;
          struct T{
              int money;
              int id;
          };
          bool cmp(T a,T b){
              return a.money<b.money;
          }
          int main(void){
              register int n,*b,*c1,*c2,*rk;
              register T *a;
              cin>>n;
              a=new T[n+3];
              b=new int[n+3];
              c1=new int[n+3];
              memset(c1,0,(n+3)*sizeof(int));
              c2=new int[n+3];
              memset(c2,0,(n+3)*sizeof(int));
              rk=new int[n+3];
              for(register int i=1;i<=n+1;i++){
                  cin>>a[i].money;
                  a[i].id=i;
              }
              for(register int i=1;i<=n;i++)
                  cin>>b[i];
              sort(a+1,a+n+1+1,cmp);
              sort(b+1,b+n+1);
              for(register int i=1;i<=n;i++)
                  c1[i]=c1[i-1]+max(a[i].money-b[i],0);
              for(register int i=n+1;i>=1;i--)
                  c2[i]=c2[i+1]+max(a[i].money-b[i-1],0);
              for (register int i=1;i<=n+1;i++)
                  rk[a[i].id]=i;
              for (register int i=1;i<=n+1;i++)
                  cout<<c1[rk[i]-1]+c2[rk[i]+1]<<' ';
              delete a;
              delete c1;
              delete c2;
              return 0;
          }
          

          不可以抄袭。

        • 1

        信息

        ID
        503
        时间
        1000ms
        内存
        256MiB
        难度
        1
        标签
        (无)
        递交数
        218
        已通过
        151
        上传者