2 条题解

  • 0
    @ 2025-11-12 20:45:28

    妈的考完之后发现没有考虑x = 0的边界条件 直接炸了 \n 按照题意模拟每天两个人走的步数即可。

    import sys
    def main():
        t = int(input())
        for _ in range(t):
            n, x, y = map(int, input().split())
            data = list(map(int, sys.stdin.readline().strip().split()))
            data.sort(reverse = True)
            total = 0
            today = 0
            if x == 0:
                print(0)
                break
            for i in range(n):
                today += 1
                total += data[i]
                x += y
                if total >= x:
                    print(today)
                    break
            else:
                print(-1)
    if __name__ == "__main__":
        main()
    
    • 0
      @ 2025-11-10 11:12:11

      本题模拟+贪心即可,仅需将能走的步数从大到小排序,然后按顺序取数直到超过“她”走的步数即可,若不能超过,则证明无解。注意初始化时“她”已经在xx格,还有不开longlong见祖宗

      void solve(){
          int n,x,y;cin>>n>>x>>y;
          vector<int> a(n+1);
      
          for(int i=1;i<=n;i++){
              cin>>a[i];
          }
          // 从大到小排序
          sort(a.begin()+1,a.end(),greater());
          ll sum=0,ta=x;
          ll ans=-1;
          for(int i=1;i<=n;i++){
              sum+=a[i];
              ta+=y;
              if(sum>=ta){
                  ans=i;break;
              }
          }
      
          cout<<ans<<endl;
      }
      • 1

      信息

      ID
      1119
      时间
      2000ms
      内存
      512MiB
      难度
      9
      标签
      递交数
      344
      已通过
      33
      上传者