USACO: Section 1.5 -- PROB Prime Palindromes

Source Code 

The key point is that we should generate the palindromes instead of enumerating all the numbers and checking if each one of them is palindrome. Since the number<=10^8, we only need to generate 10^4 palindromes. This is a great performance boost comparing to 10^8.

Lession Learned:
1. To generate palindrome, there is no need to enumerate range for each digit. We may just try [0, 9999]. I never think of this.
2. We should balance between performance and code complexity. For example, generating palindromes can boost performance a lot. However, I also tried to filter numbers<a or >b as special cases, but this performance care increases my code compexity a lot. I may just checking this after completing the numbers. 
3. It seems that I am the only one use the DFS for this problem because I hate hard-coding.
4. During enumerating through an array, always use sizeof(arr)/sizeof(item_size) as upper limit. This will save you a lot of time during refactoring.
5. How to implement the "atoi":

int atoi(char str[], int len)
{
 assert(arr!=NULL);
 assert(len>0);

 int number=0;
 for(int j=0;j<len;j++)
 {
  number*=10;
  number+=(str[j]-'0');
 }
 return number;
}



你可能感兴趣的:(USACO)