样例可过但UKE,萌新求调
查看原帖
样例可过但UKE,萌新求调
906856
A2_Zenith楼主2023/7/5 14:40
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cstdlib>
#include<iomanip>
#define rep(i,n) for(int j=1;j<=n;j++) cout<<a[j];
#define int long long
#define double long double
using namespace std;
//No,commander.
int a[10007],b[10007];
int c;
int n;
bool j1(int x){
    int ans=0;
    for(int i=1;i<=n;i++){ans+=((a[i]*x)/b[i]+1);}
    return ans>=c;
}
bool j2(int x){
    int ans=0;
    for(int i=1;i<=n;i++){ans+=((a[i]*x)/b[i]+1);}
    return ans<=c;
}
int f1(int l,int r){
    while(l<r){
        
        int mid=(l+r)/2;
        //cout<<"testf1 "<<l<<" "<<mid<<" "<<r<<endl;
        if(j1(mid))r=mid;
        else l=mid+1;
        
    }
    return l;
}
int f2(int l,int r){
    while(l<r){
        
        int mid=(l+r+1)/2;
        //cout<<"testf2 "<<l<<" "<<mid<<" "<<r<<endl;
        if(j2(mid))l=mid;
        else r=mid-1;
    }
    return l;
}
int lim=(1<<30)-1;
signed main(){
    cin>>n>>c;
    for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
    int l=f1(0,lim);
    int r=f2(0,lim);
    int ansl=0,ansr=0;
    for(int i=1;i<=n;i++){ansl+=((a[i]*l)/b[i]+1);}
    for(int i=1;i<=n;i++){ansr+=((a[i]*r)/b[i]+1);}
    if(ansl==c&&ansr==c)cout<<(r-l)+1;
    else cout<<0;
}
2023/7/5 14:40
加载中...