1089A - Alice the Fan - CodeForces Solution


dp *2200

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int a,b;

bool go3_0(){

    if(a<75) return 0;

    else if(a==75){

        if(b>=0&&b<=69){

            printf("3:0\n");

            for(int i=0;i<3;i++){

                int food=min(23,b);

                b-=food;

                printf("25:%d ",food);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-52&&b<=a-6){

            printf("3:0\n");

            printf("%d:%d ",a-50,a-52);

            b-=(a-52);

            for(int i=0;i<2;i++){

                int food=min(23,b);

                b-=food;

                printf("25:%d ",food);

            }

            return 1;

        }

        else return 0;

    }

}

bool go3_1(){

    if(a<75) return 0;

    else if(a>=75&&a<=98){

        if(b>=25&&b<=a+19){

            printf("3:1\n");

            if(b<=94){

                printf("%d:25 ",a-75);

                b-=25;

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

            }

            else{

                int x=b-25-23-23;

                printf("%d:25 ",a-25-25-x-2);

                printf("25:23 25:23 ");

                printf("%d:%d ",x+2,x);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-73&&b<=a+19){

            printf("3:1\n");

            if(b>=a-73&&b<=a-4){

                int x=a-75;

                printf("%d:%d ",x,x+2);

                b-=(x+2);

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

            }

            else{

                int y=b-25-23-23+2;

                printf("%d:25 ",a-50-y);

                printf("%d:%d ",y,y-2);

                printf("25:23 25:23 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go3_2(){

    if(a<65) return 0;

    else if(a>=65&&a<=111){

        if(b>=50&&b<=a+44){

            printf("3:2\n");

            if(b<=109){

                a-=65;

                b-=50;

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

                printf("15:%d ",b);

            }

            else{

                int x=b-50-46;

                a-=(x+2+50);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                printf("25:23 25:23 ");

                printf("%d:%d ",x+2,x);

            }

            return 1;

        }

        return 0;

    }

    else{

        if(b>=a-61&&b<=a+44){

            printf("3:2\n");

            if(b>=a-61&&b<=a-2){

                int x=a-23-25-25-15;

                printf("%d:%d ",x,x+2);

                printf("23:25 ");

                b-=(x+2+25);

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("25:%d ",food);

                }

                printf("15:%d ",b);

            }

            else{

                int y=b-50-36+2;

                a-=(y+40);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:%d ",y,y-2);

                printf("25:23 15:13 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go2_3(){

    swap(a,b);

    if(a<65) return 0;

    else if(a>=65&&a<=111){

        if(b>=50&&b<=a+44){

            printf("2:3\n");

            if(b<=109){

                a-=65;

                b-=50;

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:15 ",b);

            }

            else{

                int x=b-50-46;

                a-=(x+2+50);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                printf("23:25 23:25 ");

                printf("%d:%d ",x,x+2);

            }

            return 1;

        }

        return 0;

    }

    else{

        if(b>=a-61&&b<=a+44){

            printf("2:3\n");

            if(b>=a-61&&b<=a-2){

                int x=a-23-25-25-15;

                printf("%d:%d ",x+2,x);

                printf("25:23 ");

                b-=(x+2+25);

                for(int i=0;i<2;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

                printf("%d:15 ",b);

            }

            else{

                int y=b-50-36+2;

                a-=(y+40);

                for(int i=0;i<2;i++){

                    int food=min(23,a);

                    a-=food;

                    printf("25:%d ",food);

                }

                printf("%d:%d ",y-2,y);

                printf("23:25 13:15 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go1_3(){

    swap(a,b);

    if(a<75) return 0;

    else if(a>=75&&a<=98){

        if(b>=25&&b<=a+19){

            printf("1:3\n");

            if(b<=94){

                printf("25:%d ",a-75);

                b-=25;

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

            }

            else{

                int x=b-25-23-23;

                printf("25:%d ",a-25-25-x-2);

                printf("23:25 23:25 ");

                printf("%d:%d ",x,x+2);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-73&&b<=a+19){

            printf("1:3\n");

            if(b>=a-73&&b<=a-4){

                int x=a-75;

                printf("%d:%d ",x+2,x);

                b-=(x+2);

                for(int i=0;i<3;i++){

                    int food=min(23,b);

                    b-=food;

                    printf("%d:25 ",food);

                }

            }

            else{

                int y=b-25-23-23+2;

                printf("25:%d ",a-50-y);

                printf("%d:%d ",y-2,y);

                printf("23:25 23:25 ");

            }

            return 1;

        }

        else return 0;

    }

}

bool go0_3(){

    swap(a,b);

    if(a<75) return 0;

    else if(a==75){

        if(b>=0&&b<=69){

            printf("0:3\n");

            for(int i=0;i<3;i++){

                int food=min(23,b);

                b-=food;

                printf("%d:25 ",food);

            }

            return 1;

        }

        else return 0;

    }

    else{

        if(b>=a-52&&b<=a-6){

            printf("0:3\n");

            printf("%d:%d ",a-52,a-50);

            b-=(a-52);

            for(int i=0;i<2;i++){

                int food=min(23,b);

                b-=food;

                printf("%d:25 ",food);

            }

            return 1;

        }

        else return 0;

    }

}

int main(){

    //freopen("a.in","r",stdin);

    //freopen("a.out","w",stdout);

    int T;

    cin>>T;

    while(T--){

        scanf("%d %d",&a,&b);

        int aa=a,bb=b;

        if(go3_0()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go3_1()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go3_2()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go2_3()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go1_3()) {printf("\n");continue;}

        a=aa;b=bb;

        if(go0_3()) {printf("\n");continue;}

        a=aa;b=bb;

        printf("Impossible\n");

    }



    return 0;

}


Comments

Submit
0 Comments
More Questions

1157E - Minimum Array
1661D - Progressions Covering
262A - Roma and Lucky Numbers
1634B - Fortune Telling
1358A - Park Lighting
253C - Text Editor
365B - The Fibonacci Segment
75A - Life Without Zeros
1519A - Red and Blue Beans
466A - Cheap Travel
659E - New Reform
1385B - Restore the Permutation by Merger
706A - Beru-taxi
686A - Free Ice Cream
1358D - The Best Vacation
1620B - Triangles on a Rectangle
999C - Alphabetic Removals
1634C - OKEA
1368C - Even Picture
1505F - Math
1473A - Replacing Elements
959A - Mahmoud and Ehab and the even-odd game
78B - Easter Eggs
1455B - Jumps
1225C - p-binary
1525D - Armchairs
1257A - Two Rival Students
1415A - Prison Break
1271A - Suits
259B - Little Elephant and Magic Square