T5河里的价格WA80分求调

题面

#include<bits/stdc++.h>
using namespace std;
int main(){
  freopen("price.in","r",stdin);
  freopen("price.out","w",stdout);
  long long n,t,p,m,k,a[100001],l,r,mid,q;
  cin>>n;
  for(int i=0;i<n;i++)cin>>a[i];
  sort(a,a+n);
  cin>>t;
  for(int i=0;i<t;i++){
    cin>>p>>m>>k;
    if(p*m<=a[0]){
      cout<<"888\n";
      continue;
    }l=0,r=n-1;
    while(l+1<r){
      mid=l+(r-l)/2;
      if(a[mid]>p*m)r=mid;
      else l=mid;
    }l=0,r=n;
    while(l+1<r){
      mid=l+(r-l)/2;
      if(a[mid]>p*m)r=mid;
      else l=mid;
    }q=a[l];
    if(l>=k)q-=q%10;
    if(q>=a[n-1]||q<=a[0])cout<<"888\n";
    else cout<<q<<"\n";
  }return 0;
}

标题是我故意打错的

把二分改成这个逝世
int w=upper_bound(a+1,a+n+1,pm)-a-1;

局部截取_20250210_184917
听取WA声一片好吧

等等
pm=p*m

具体介绍:C++ upper_bound()函数_cpp中upperbound函数-CSDN博客

我改了,就是听取WA声一片

#include<bits/stdc++.h>
using namespace std;
int main(){
  freopen("price.in","r",stdin);
  freopen("price.out","w",stdout);
  long long n,t,p,m,k,a[100001],l,r,mid,q;
  cin>>n;
  for(int i=0;i<n;i++)cin>>a[i];
  sort(a,a+n);
  cin>>t;
  for(int i=0;i<t;i++){
    cin>>p>>m>>k;
    if(p*m<=a[0]){
      cout<<"888\n";
      continue;
    }l=0,r=n-1;
    while(l+1<r){
      mid=l+(r-l)/2;
      if(a[mid]>p*m)r=mid;
      else l=mid;
    }q=upper_bound(a,a+n,p*m)-a-1;
    if(l>=k)q-=q%10;
    if(q>=a[n-1]||q<=a[0])cout<<"888\n";
    else cout<<q<<"\n";
  }return 0;
}

私信