代码报错求助
  • 板块学术版
  • 楼主xsmfollower
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/10/5 10:50
  • 上次更新2024/10/5 13:32:05
查看原帖
代码报错求助
1308728
xsmfollower楼主2024/10/5 10:50

第 31 行一直报错。

报错信息:[Error] cannot convert 'std::vector<long long int>::iterator {aka __gnu_cxx::__normal_iterator<long long int*, std::vector<long long int> >}' to 'long long int*' for argument '1' to 'long long int bin_search(long long int*, long long int*, long long int)'

#include<cstdio>
#include<vector>
#include<set>
#include<algorithm>
#define int long long
using namespace std;
const int N=5e5+10; int n,k; vector<int>a[N]; multiset<int>ans;
void dfs(int kk,int sum) {
  if(kk==n+1) {
    //printf("A%lld\n",sum);
    if(ans.size()<k) ans.insert(sum);
    else {
      multiset<int>::iterator it=--ans.end(); //printf("B%lld\n",*it);
      if(sum<*it) ans.erase(it),ans.insert(sum);
    }
    return;
  }
  for(auto i:a[kk]) dfs(kk+1,sum+i);
}
int bin_search(int *aa,int *an,int ai) {
  int l=0,r=an-aa;
  while(l<r) {
  	int mid=(l+r)>>1;
  	if(aa[mid]>ai) r=mid;
  	else l=mid+1;
  }
  return l;
}
int get_rank(int sum) {
  int rank=0;
  for(auto i:a[1]) rank+=bin_search(a[2].begin(),a[2].end(),sum-i);//这里报错
  return rank;
}
int solve() {
  int l=0,r=a[1][a[1].size()-1]+a[2][a[2].size()-1];
  while(l<r) {
  	int mid=(l+r)>>1;
  	if(get_rank(mid)<k) l=mid+1;
  	else r=mid;
  }
  return l;
}
signed main() {
  //freopen("sequence.in","r",stdin);
  //freopen("sequence.out","w",stdout);
  scanf("%lld",&n);
  for(int i=1;i<=n;i++) {
    int l; scanf("%lld",&l);
    for(int j=1,k;j<=l;j++) scanf("%lld",&k),a[i].push_back(k);
    sort(a[i].begin(),a[i].end());
  }
  scanf("%lld",&k);
  if(n<=2) {
    dfs(1,0);
    if(ans.size()<k) printf("-1");
    else {
      for(int i=1;i<k;i++) ans.erase(ans.begin()); 
      printf("%lld",*ans.begin());
    }
  }
  else {
    if(1ll*a[1].size()*a[2].size()<k) return printf("-1"),0;
    int sum=solve();
    for(int i=3;i<=n;i++) sum+=a[i][0];
    printf("%lld",sum);
  }
  return 0;
}
2024/10/5 10:50
加载中...