Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Cuantos dedos
#include <iostream> #include <map> #include <vector> #define MOD 700666007 using namespace std; typedef long long ll; map<int, int> periodo; vector<ll> numeros, acumulado; int getPeriodo(int a, int b){ // cout<<"datos en la funcion\n"; int i = 0, r; r = a%b; while(r!=0 and periodo.find(r) == periodo.end()) { periodo[r] = i; a = r*10; r = a%b; numeros.push_back(a/b); if(i == 0) acumulado.push_back(a/b); else acumulado.push_back((a/b + acumulado[i-1]%MOD)%MOD); i++; // cout<<"r "<<r<<" a/b "<<a/b<<"\n"; } return r; } int main(){ int a, b, n, T; int r, indice, tamano, exc, vueltas; int tam_per, per, prim; int cuenta, prim_exc; int cant_exc, cant_v_p, cant_v, cant_prim_exc, cant_per; // Cantidad de excedente de primera v cin>>T; while(T--){ prim = 0; prim_exc = 0; cant_prim_exc = cant_exc = cant_v = cant_v_p = 0; cin>>a>>b>>n; r = getPeriodo(a,b); indice = periodo[r]; tamano = numeros.size(); cuenta = n; tam_per = tamano-indice; if(n>tamano) { prim = 1; cuenta = cuenta - tamano; }else { prim_exc = n; cuenta = cuenta - n; } vueltas = cuenta/tam_per; exc = cuenta%tam_per; cout<<"\ndatos en el main() \n"; //cout<<"r "<<r<<"\n"; cout<<"tam "<<tamano<<"\n"; cout<<"indice "<<indice<<"\n"; cout<<"prim "<<prim<<"\n"; cout<<"tam_per "<<tam_per<<"\n"; cout<<"vuelt "<<vueltas<<"\n"; cout<<"exc "<<exc<<"\n"; cout<<"prim_exc "<<prim_exc<<"\n\n"; if(indice == 0) cant_per = acumulado[acumulado.size()-1]; else cant_per = acumulado[acumulado.size()-1]-acumulado[indice-1]; if(prim_exc>0) cant_prim_exc = acumulado[prim_exc-1]; if(exc>0) cant_exc = acumulado[exc-1] - acumulado[indice-1]; if(vueltas>0) cant_v = vueltas * cant_per; if(prim>0) cant_v_p = cant_per; cout<<"\nDatos de resultado\n"; cout<<"cant_per "<<cant_per<<"\n"; cout<<"cant_prim_exc "<<cant_prim_exc<<"\n"; cout<<"cant_exc "<<cant_exc<<"\n"; cout<<"cant_v_p "<<cant_v_p<<"\n"; cout<<"cant_v "<<cant_v<<"\n"; cout<<"\nres: "<<cant_prim_exc + cant_exc + cant_v + cant_v_p<<"\n"; periodo.clear(); numeros.clear(); acumulado.clear(); } /////////////////////////////////////////////////// /*cout<<"numeros: "; for(auto a: numeros){ cout<<a<<" "; }cout<<"\n"; cout<<"\nacumulado: "; for(auto a: acumulado){ cout<<a<<" "; }*/ //cout<<"\nIndice: "<<numeros[indice]<<"\n"; /*if (n <= tamano) cout<<acumulado[n-1]%MOD<<"\n"; else if (n > tamano and r==0) cout<<acumulado[tamano-1]%MOD<<"\n"; else { if (indice != 0) cant_per = (acumulado[tamano-1]%MOD-acumulado[indice-1]%MOD)%MOD; else cant_per = acumulado[tamano-1]%MOD; tam_per = tamano-indice; vueltas = (n-tamano)/tam_per; exc = n%tam_per; if(exc != 0) { if (indice != 0) cant_exc = (acumulado[indice + exc - 1]%MOD - acumulado [indice - 1]%MOD)%MOD; else cant_exc = acumulado[indice + exc - 1]%MOD; } else cant_exc = 0; // cout<<"cant: "<<acumulado[indice + exc - 1]<<"\n"; // cout<<"tams: "<<cant_per <<" "<< vueltas*cant_per <<" "<< cant_exc<<"\n"; cout<<(cant_per%MOD + vueltas*cant_per%MOD + cant_exc%MOD)%MOD<<"\n"; } periodo.clear(); numeros.clear(); acumulado.clear(); }*/ }
run
|
edit
|
history
|
help
0
CheckSymbolBalance
MovConstrAssign4
Dar
SIP_parser_with_std_regex_need_help_to_improve_it.cc
TemplateDoubly
ammmma
member function pointer
constructing object on first use as return value of (pointer to) object-returning function
My First Wall
Bin Tree build