sto cercando di risolvere SPOJ problem "Ones and zeros":Spoj 370 - Ones e zeri (ONEZERO)
Alcuni numeri interi positivi hanno la loro rappresentazione decimale costituito solo da uno e zero, e con almeno una cifra uno, ad esempio, 101. Se un numero intero positivo non ha una tale proprietà, si può provare a moltiplicarlo per un numero intero positivo per scoprire se il prodotto ha questa proprietà.
Il mio approccio a questo problema stava semplicemente facendo BFS. Prendendo una stringa contenente solo '1'
e poi facendo BFS con esso e ad ogni passaggio aggiungendo '1'
e '0'
. Tenere traccia del numero in forma di stringa e resto fino ad ora. Quando il resto è zero, il numero è stato trovato.
Il mio problema è: il mio codice impiega troppo tempo per i casi di test, ad es. 9999 o 99999. Come posso migliorare il runtime dell'algoritmo?
// Shashank Jain
/*
BFS
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#define LL long long int
using namespace std;
LL n;
string ans;
void bfs()
{
string str,first,second;
str+='1'; // number will start with '1' always
if(n==1)
{
ans=str;
return;
}
queue<pair<string,LL> >q; // pair of STRING(number) and long long int
// (to hold remainder till now)
pair<string,LL>p;
p=make_pair(str,1);
q.push(p);
LL rem,val,temp;
while(q.empty()==0)
{
p=q.front();
q.pop();
str=p.first;
val=p.second;
if(val==0) // remainder is zero means this is number
{
ans=str;
return ;
}
// adding 1 to present number
temp=val*10+1;
rem=(temp)%n;
firstone=str+'1';
p=make_pair(firstone,rem);
q.push(p);
// adding 0 to present number
temp=val*10+0;
rem=(temp)%n;
secondone=str+'0';
p=make_pair(secondone,rem);
q.push(p);
}
}
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
bfs();
for(i=0;i<ans.size();i++)
{
printf("%c",ans[i]);
}
printf("\n");
}
return 0;
}
@Christian Ammer - Grazie per la modifica! –
Prego, è sempre una buona idea includere la descrizione del problema nella domanda e formattare il codice in modo proattivo. –