Buonasera a tutti.
Stavo provando a risolvere ois_cabala (algobadge) e non riesco ad arrivare sotto il tempo di esecuzione di 1 secondo negli ultimi 3 testcase. Il mio codice è questo:
#include <stdio.h>
#include <assert.h>
//#include<vector>
//#include<cmath>
//using namespace std;
long long to_int(long long a[], int dim){
long long temp=0, molt=1;
for(int i=0; i<dim; i++){
temp+=a[i]*molt;
molt*=10;
}
return temp;
}
bool cifreAd(long long a[], int dim){
for(int i=0; i<dim-1;i++){
if(a[i]==a[i+1]){
return false;
}
}
return true;
}
void incrementa(long long a[], int &dim){
a[0]+=3;
int i;
for(i=0; i<dim-1; i++){
if(a[i]>9){
a[i]=3;
a[i+1]+=3;
}
}
if(a[i]>9){
a[i]=3;
a[i+1]=3;
dim++;
}
}
long long occulta(int N, int M) {
long long arrNumero[18];
arrNumero[0]=3;
int dim=1, maxRestoCorr=0, temp;
do{
if(cifreAd(arrNumero, dim)){
temp=to_int(arrNumero, dim)%M;
if(temp>maxRestoCorr){
maxRestoCorr=temp;
}
}
incrementa(arrNumero, dim);
}while(dim<=N);
return maxRestoCorr;
}
int main() {
FILE *fr, *fw;
int T, N, M, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(1 == fscanf(fr, "%d", &T));
for (i=0; i<T; i++) {
assert(2 == fscanf(fr, "%d %d", &N, &M));
fprintf(fw, "%lld ", occulta(N, M));
}
fprintf(fw, "\n");
fclose(fr);
fclose(fw);
return 0;
}
Qualcuno gentilmente potrebbe aiutarmi a trovare qualche possibilie ottimizzazione?