我这怎么回事,为什么只会输出一个负数,求调
  • 板块学术版
  • 楼主difficultlong
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/4 07:30
  • 上次更新2024/9/4 16:31:28
查看原帖
我这怎么回事,为什么只会输出一个负数,求调
1435692
difficultlong楼主2024/9/4 07:30
题目
有 n
个线性序列,第 i
个序 列可以表示成 ki×x+bi
的形式(x=0,1,2,…)。
请问将这些序列的数合并起来后,第 m小的数是多少(重复出现的数合并后也会多次现)。
------------
输入格式
输入第一行一个数 n
接下来 n
行每行两个数表示 ki,bi
最后一行一个数 m
------------
输出格式
输出一个数表示答案。
------------
样例输入
2
1 2
5 2
8
------------
样例输出
7
------------
数据规模
对于 100%的数据,保证 1≤n≤100000,1≤m≤100000,1≤ki,bi≤1000
------------

我这个是怎么回事,为啥是错的

#include<bits/stdc++.h>
using namespace std;
int n,m,k[100001],b[100001];
long long calc(int x){
    long long y=0;
    for(int i=1;i<=n;i++){
        if(b[i]<=x)
        y+=(x-b[i])/k[i]+1;
    }
    return y;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&k[i],&b[i]);
    }
    scanf("%d",&m);
    int L=0,R=1<<31;
    while(L+1<R){
        int w=(L+R)/2;
        if(calc(w)<m){
            L=w;
        }
        else{
            R=w;
        }
    }
    printf("%d\n",R);
    return 0;
}

2024/9/4 07:30
加载中...