Covaxin vs Covishield Solution September Challenge 2021

Codechef Covaxin vs Covishield Solution

There are two types of vaccines available: Covaxin and Covishield.

A black marketeer has XX Rs and wants to buy as many vaccines as possible. Due to the black marketing concerns, government has enforced the following policy:

  • ithith dose of Covaxin costs a+(i−1)⋅ba+(i−1)⋅b coins for every i≥1i≥1.
  • ithith dose of Covishield costs c+(i−1)⋅dc+(i−1)⋅d coins for every i≥1i≥1.

The values of the four parameters a,b,ca,b,c and dd, however isn’t constant and might vary from query to query. In general the value of these four parameters for ithith query will be Ai,Bi,CiAi,Bi,Ci and DiDi respectively. Let ansiansi be the maximum total quantity of vaccines the black marketeer can buy corresponding to the ithith query. For each query, you have to find the value of ansiansi.

You will be given integers A1,B1,C1,D1,P,Q,R,S,TA1,B1,C1,D1,P,Q,R,S,T and MM which will define the queries to be followed.

For i≥1i≥1 and i≤I−1i≤I−1:

  • Ai+1=(Ai+ansi⋅T)modM+PAi+1=(Ai+ansi⋅T)modM+P
  • Bi+1=(Bi+ansi⋅T)modM+QBi+1=(Bi+ansi⋅T)modM+Q
  • Ci+1=(Ci+ansi⋅T)modM+RCi+1=(Ci+ansi⋅T)modM+R
  • Di+1=(Di+ansi⋅T)modM+SDi+1=(Di+ansi⋅T)modM+S .

Note: Since the output is large, prefer using fast input-output methods.

Also See: September Long Challenge 2021 Solutions

Input Format

  • First line contains of input contains an integer II denoting the number of queries.
  • Second line of input contains five integers X,A1,B1,C1,D1X,A1,B1,C1,D1.
  • Third line of input contains six integers P,Q,R,S,T,MP,Q,R,S,T,M.

Output Format

For each query output the maximum quantity of vaccines the black marketeer can buy.

Constraints

  • 1≤I≤5⋅1051≤I≤5⋅105
  • 1≤X,A1,B1,C1,D1≤10181≤X,A1,B1,C1,D1≤1018
  • 1≤P,Q,R,S,M≤10181≤P,Q,R,S,M≤1018
  • 1≤T≤1091≤T≤109

Subtasks

Subtask #1 (10 points):

  • 1≤I≤1031≤I≤103
  • 1≤X≤1091≤X≤109
  • Time limit: 11 sec

Subtask #2 (30 points):

  • 1≤I≤1031≤I≤103
  • 1≤X≤10151≤X≤1015
  • 109≤A1≤1018109≤A1≤1018
  • 109≤B1≤1018109≤B1≤1018
  • 109≤P≤1018109≤P≤1018
  • 109≤Q≤1018109≤Q≤1018
  • Time limit: 11 sec

Subtask #3 (60 points):

  • Original constraints
  • Time limit: 33 sec

Sample Input 1 

3
20 2 3 4 1
3 7 8 4 11 20

Sample Output 1 

4
1
2

Explanation

Test case 11:

  • For the first query, [a,b,c,d]=[A1,B1,C1,D1]=[2,3,4,1][a,b,c,d]=[A1,B1,C1,D1]=[2,3,4,1]. It is optimal to buy 22 doses of Covaxin (2+5=7)(2+5=7) and 22 doses of Covishield (4+5=9)(4+5=9). So the total money spent is 7+9=167+9=16 and now the black marketeer cannot buy any more doses. So the answer is 4.
  • For the second query, [a,b,c,d]=[A2,B2,C2,D2]=[(2+11⋅4+3)mod20,(3+11⋅4+7)mod20,(4+11⋅4+8)mod20,(1+11⋅4+4)mod20]=[9,14,16,9][a,b,c,d]=[A2,B2,C2,D2]=[(2+11⋅4+3)mod20,(3+11⋅4+7)mod20,(4+11⋅4+8)mod20,(1+11⋅4+4)mod20]=[9,14,16,9].
  • For the third and the last query, [a,b,c,d]=[A3,B3,C3,D3]=[3,12,15,4][a,b,c,d]=[A3,B3,C3,D3]=[3,12,15,4].

Follow us on telegram for quick update an abundance of free knowledge: Click Here

Solution

Program C:

#include <stdio.h>
#define ll long long int

int main(void) {
    
	int I,i,j,flag;
	scanf("%d",&I);
	ll A,B,C,D,x,add,p,q,r,s,m,covaxin,covishield;
	scanf("%lld %lld %lld %lld %lld",&x,&A,&B,&C,&D);
	int t,ans;
	scanf("%lld %lld %lld %lld %d %lld",&p,&q,&r,&s,&t,&m);

    for(int k=0;k<I;k++){
		add=0;
		i=0;
		j=0;
		flag=0;
		if(k>0){
		A = (A+ans*t)%m + p;
		B = (B+ans*t)%m + q;
		C = (C+ans*t)%m + r;
		D = (D+ans*t)%m + s;
		}
        while(x>add){
        	covaxin=A + i*B;
	    	covishield=C + j*D;
			if((add+covishield)>x && (add+covaxin)>x)
				break;
			if(covaxin<=covishield){
				add+=covaxin;
				i++;
				flag++;
			}
			else{
				add+=covishield;
				j++;
				flag++;
			}
		}
    	ans = flag;
		printf("%d\n",ans);
	}  
	return 0;
}

Program C++:

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;

ll max_vac(ll x, ll a, ll b){
	ll mv = 1, total_x = 0;
	total_x = (mv*(2*a + (mv-1)*b))/2;
	if(total_x > x) return 0;
	else while(total_x <= x){
		mv = mv<<1;
		total_x = (mv*(2*a + (mv-1)*b))/2;
	}
	ll l = mv>>1, h = mv;
	while(l<=h){
		ll i = l + (h-l)/2;
		total_x = (i*(2*a + (i-1)*b))/2;
		if(total_x > x) h = i-1;
		else l = i+1;
	}
	return h;
}

ll query_i(ll x, ll a, ll b, ll c, ll d){
	ll u = max_vac(x, a, b);//if j == 0;
	ll v = max_vac(x, c, d);//if i == 0;
	if(u==0) return v;
	if(v==0) return u;
	ll l = 0, h = u;
	ll ans = 0;
	while(l<=h){
		ll i = l + (h-l)/2;
		ll rem_x = x - (i*(2*a+(i-1)*b))/2;
		ll j = max_vac(rem_x, c, d);
		if(i==0) break;
		ans = max(ans, i+j);
		ll cost_ith_covax = a + (i-1)*b;
		ll cost_jth_covis = c + (j-1)*d;
		if(cost_ith_covax < cost_jth_covis) l = i+1;
		else if(cost_ith_covax > cost_jth_covis) h = i-1;
		else{
			if(i<j) h = i-1;
			else l = i+1;
		}
	}
	ll total_covax = h;
	ll total_covis = max_vac(x-(total_covax*(2*a + (total_covax-1)*b))/2, c, d);
	return max({ans, total_covax + total_covis, u, v});
}

void solve(){
	ll I, x, a, b, c, d, p, q, r, s, t, m;
	cin >> I
		>> x >> a >> b >> c >> d
		>> p >> q >> r >> s >> t >> m;
	while(I--){
		ll ans = query_i(x, a, b, c, d);
		
		cout << ans << '\n';
		
		a = (a%m + ((ans%m)*(t%m))%m)%m + p;
		b = (b%m + ((ans%m)*(t%m))%m)%m + q;
		c = (c%m + ((ans%m)*(t%m))%m)%m + r;
		d = (d%m + ((ans%m)*(t%m))%m)%m + s;
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	solve();
	return 0;
}

Program Java:

import java.io.*;
import java.util.*;

public class Main
{
	public static void main(String[] args) throws IOException
	{
		try{
		    long I;
		    long x,a,b,c,d,p,q,r,s,t,m;
		Scanner sc=new Scanner(System.in);
		I=sc.nextLong();
		x=sc.nextLong();
		   a=sc.nextLong();
		   b=sc.nextLong();
		   c=sc.nextLong();
		   d=sc.nextLong();
		   p=sc.nextLong();
		   q=sc.nextLong();
		   r=sc.nextLong();
		   s=sc.nextLong();
		   t=sc.nextLong();
		   m=sc.nextLong();
		while(I--!=0)
			
		{
		   
   
        long rem = x;
        long cscount=1,covcount=1,res=0;
        long covaxin,covidshield;
       
        while(rem!=0)
        {
            long spend;
            covaxin = a+(covcount-1)*b;
            covidshield = c+(cscount-1)*d;
            if(covaxin<covidshield)
            {
                spend = covaxin;
                covcount++;
            }
            else if(covaxin>covidshield){
                spend = covidshield;
                cscount++;
            }
            else {
               
                if(covcount>cscount)
                { 
                    spend = covaxin;
                    covcount++;
                }
                else{
                    spend = covidshield;
                    cscount++;
                    
                }                
            }
            if(rem>=spend){
                res++;
                rem=rem-spend;
            }
            else
            
            break;
            
        }
		
       System.out.println(res);
        a = (a+res*t)%m+p;
        b = (b+res*t)%m+q;
        c = (c+res*t)%m+r;
        d = (d+res*t)%m+s;
        
		}
    
}
		    

						

			
		catch(Exception e){
			return;
		}
	}}

Program Python:

# cook your dish here
I = int(input())
x,a,b,c,d = map(int, input().split())
p,q,r,s,t,m = map(int, input().split())

for i in range(I):
    cost = 0
    count = 0
    pill1 = 1
    pill2 = 1
    while cost<x:
        p1 = a+(pill1-1)*b
        p2 = c+(pill2-1)*d
        # print('prices ', p1, p2)
        if p1>p2 and cost+p2<=x:
            # print('p2 selected')
            cost+=p2
            count+=1
            pill2+=1
        elif p2>p1 and cost+p1<=x:
            # print('p1 selected')
            cost+=p1
            count+=1
            pill1+=1
        else:
            if cost+p2>x and cost+p1>x:
                break
            else:
                # print('p1 of both selected')
                cost+=p1
                count+=1
                pill1+=1
            
    print(count)
    a = (a + count*t)%m + p 
    b = (b + count*t)%m + q
    c = (c + count*t)%m + r 
    d = (d + count*t)%m + s 

Codechef Long Challenges

September Long Challenge 2021 Solution

August Long Challenge 2021 Solutions

Leave a Comment