[USACO] Dual Palindromes

    技术2022-05-19  24

    真是乐极生悲啊,这么水的题居然让我提交了4次才过,Faint!

    一次fprintf写成printf,一次S的范围,一次base的范围

    输出写到文件不好调试,所以我总是输出到控制台。

    S是小于10000,但不等于求得的解也得小于10000,理解有误

    base是2~10,包含10进制,太阳!

    代码照搬了上一题的两个函数。。。


    /* ID: LANG: C TASK: dualpal */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define SZ 40 char *num = "0123456789"; void convert(int base, int n, char *p) { int i, k; i = 0; while(n > 0) { k = 0; while(n >= base) { n -= base; k++; } p[i++] = num[n]; n = k; } p[i++] = '/0'; } int isPalindromic(char *p) { int i, j, len; len = strlen(p); for(i = 0, j = len - 1; i < j; i++, j--) if(p[i] != p[j]) return 0; return 1; } int main() { FILE *fin = fopen("dualpal.in", "r"); FILE *fout = fopen("dualpal.out", "w"); char org[SZ]; int i, k, base; int N, S; fscanf(fin, "%d %d", &N, &S); i = 0; while(++S && i < N) { k = 0; for(base = 2; base <= 10; base++) { convert(base, S, org); if(isPalindromic(org)) k++; if(k >= 2) { fprintf(fout, "%d/n", S); i++; break; } } } exit(0); }  


    分析的解法没什么新鲜的东西,不过它提到我们如何知道题目是不是足够简单?

    它说如果我们使用暴力破解出错,我们就知道需要更聪明更有效的算法了。。。(这不是废话么?还是我没理解对?)

     


    最新回复(0)