Can anyone help me finding the fault in my submission?

Revision en2, by yooz, 2024-11-13 10:20:41

~~~~~

include <bits/stdc++.h>

using namespace std;

define int long long

define inf LLONG_MAX

define pb push_back

define deb cout<<"YES"<<endl

define fi first

define se second

define pii pair<int,int>

define lc 2*pos

define rc 2*pos+1

int calc(int n,int a){
    int x= 2*a + n-1; 
    x*=n; 
    x/=2;
    return x;

}

signed main(){ vectorpul(10); pul[0]=1; for(int i=1;i<=6;i++) pul[i]=pul[i-1]*10; int t;cin>>t;while(t--){ int a,b,c,k;cin>>a>>b>>c>>k; if (a>b) swap(a,b); if (c-b!=1 && c-b!=0){ cout<<-1<<endl; continue; } int l=pul[a-1],r=pul[a]-1; bool yes=0; while(l<=r){ int mid=(l+r)/2; int aa=pul[b]-1-max(pul[c-1]-pul[a-1],1ll)+1; int cc=max(0ll,pul[b]-1+pul[a-1]-(pul[c]-1)); aa-=cc; int prev=calc(mid-1-pul[a-1]+1,aa); int cur=calc(mid-pul[a-1]+1,aa); // cout<<mid<<" "<<prev<<" "<<cur<<" "<<aa<<endl; int dif=k-prev; int tar=max(pul[c-1]-mid-1,0ll)+dif; int mi=tar+mid; if (prev<=k && k<=cur && mi<=pul[c]){ cout<<mid<<" + "<<tar<<" = "<<mi<<endl; yes=1; break; } else if (cur<k) l=mid+1; else r=mid-1; } if (!yes) cout<<-1<<endl;

}

}

// 100 // 10 90 // 1. cuman bisa yang lowest

// Minimal + maks dari ini buat jadiin c // Minimal = pul[a-1] // Maksimal b= pul[]

// pul[c+1]-1 // bikin 100 perlu berapa dan terus maksimalnya berapa ~~~~~

Hi! So this is the problem: https://codeforces.net/contest/1836/problem/C I think the solution is basically the same but I am using binary search (which is actually not needed but yeah the idea should have been the same) but this is incorrect... does anyone know where is the fault or is it logic fault? thank you so much!

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English yooz 2024-11-13 10:21:12 224
en2 English yooz 2024-11-13 10:20:41 318
en1 English yooz 2024-11-13 10:19:53 1940 Initial revision (published)