<- Back

Generic header to make some cool tests

Haha, this is so krazy,I don’t actually know what to type over here

5 – 7 minutos

01.

First Krazy Title

02.

Second Krazy Title

C++
#include <bits/stdc++.h>
using namespace std;
long long power(long long base, long long exp, long long module){
    long long res = 1;
    base %= module;
    while(exp>0){
        //cout<<"krazy\n";
        if(exp%2 == 1) res = (res*base)%module;
        base = (base*base)%module;
        exp/=2;
    }
    return res;
}
int modulo(vector<int> numbers,int modulo){
    int retorno = 0;
    int caso = 0;
    if(numbers.size()%2==0) caso = 1;
    else caso = 0;
    for(int i = numbers.size()-1;i>=0;i--){
        if(i%2==caso){
            retorno+=numbers[i]%modulo;
        }
        else{
            retorno-=numbers[i]%modulo;
        }
        retorno%=modulo;
    }
    return retorno;
}
int main(){
    ios_base::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    //cout<<"23456 % 11 = "<<23456%11<<" y 3000 % 11 ="<<3000%11<<endl;
    //Metodo 1: Sacar el modulo y luego numero a numero ir buscando la resta que saque el modulo adecuado.
    //Metodo 2: Buscar los multiplos de 11 que sean diferentes en solamente un numero con el original.
    //Elijo metodo 1 porque son muchos multiplos con los que trabajar.
    //Caso de prueba para base 2.
    // 1 0 1 1 1
    // 1 + 1 + 2 + 1 
    // 2 * 2 * 2 * 2 = 2* 4 = 8 -> 2
    long long base;
    int n;

    cin>>base>>n;
    vector<int> numeros(n);
    for(int &i: numeros) cin>>i;
    int residuo_original = 0;
    residuo_original = ((modulo(numeros,base+1))+base+1)%(base+1);
    int objetivo = base+1 - residuo_original;
    //cout<<"el residuo original es "<<residuo_original<<endl;
    //cout<<"el objetivo es "<<objetivo<<endl;
    bool pos = false;
    long long indice = 0;
    long long cambio = 0;
    if(objetivo == base+1 ){
        pos = true;
    }
    else{

        //cout<<"krazy";
        //cout<<"Residuo original "<<residuo_original<<endl;
        //int posiblePositivo = base+1 - residuo_original;
        //int posibleNegativo = -residuo_original;
        //cout<<"posible positivo "<<posiblePositivo<<endl;
        //cout<<"posible negativo "<<posibleNegativo<<endl;
        //int contribucionOriginal;
        int caso = 0;
        if (numeros.size()%2==0) caso = 1;
        else caso = 0;
        for(int i =0; i<n;i++){
            int intento = 0;
            //contribucionOriginal = 0;
            if(numeros[i]==0){
                    continue;
                }
            if(i%2==caso){
                //cout<<"krazy\n";
                //contribucionOriginal+=numeros[i]%(base+1);
                intento = numeros[i]-residuo_original;
                //cout<<"intento "<<intento<<endl;
                
                
            }
            else{
                //contribucionOriginal-=numeros[i]%(base+1);
                intento = numeros[i]- ((base+1)-residuo_original );
                //cout<<"intento "<<intento<<endl;
                
            }
            if (intento >= 0) {
                pos = true;
                cambio = intento;
                indice = i + 1;
                break; 
            }
            

            /*for(int j = 0; j<numeros[i];j++){
                
                if(i%2==caso){
                    intento=j%(base+1);
                }
                else{
                    intento = -(j%(base+1));
                }
                if(intento>contribucionOriginal){
                    intento -= contribucionOriginal;
                }
                else if(intento < contribucionOriginal){
                    intento = -(contribucionOriginal-intento);
                }
                else{
                    intento = 0;
                }
                cout<<"INTENTO VALE "<<intento<<endl;
                if(intento == posiblePositivo){
                    indice = i+1;
                    cambio = j;
                    pos = true;
                    break;
                }
                if(intento == posibleNegativo){
                    indice = i+1;
                    cambio = j;
                    pos = true;
                    break;
                }
                

            }*/
            if(pos){
                break;
            }
        }


    }
    if(pos){
        cout<<indice<<" "<<cambio<<"\n";
    }
    else{
        cout<<-1<<" "<<-1<<"\n";
    }
    
    //cout<<residuo_original;
    

    return 0;
}

03.

Third Krazy Title

</> Conclusion

TAGS

,