首页 > 代码库 > hdu 4956 Poor Hanamichi 解题报告

hdu 4956 Poor Hanamichi 解题报告

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956(它放在题库后面的格式有一点点问题啦,所以就把它粘下来,方便读者观看)

 

 

 

 

 

  题目意思:给出一个范围 [l, r] 你, 问是否能从中找到一个数证明 Hanamichi’s solution 的解法是错的。

      Hanamichi’s solution 是这样的:

      对于某个数 X,从右往左数它的每一位数字(假设第一位是从0开始数)。它 偶数位的数字之和 -  奇数位的数字之和  = 3  而且 这个 X 满足函数 X mod 11 = 3 。

      一开始见数据范围达到1e18 就刹时吓坏了,怕暴力超时,于是比赛的时候,就不敢做咯~~~~点知,原来可以啦,真奇怪= =

      一个个枚举即可,题目有点长,意思有点难明,关键是太多干扰的地方,例如这句:

   

      纯粹是吓人滴 = =

      

     

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5  6 bool check(__int64 x) 7 { 8     int sum[2] = {0, 0}; 9     __int64 t = x;10     int p = 0;11     while (x)12     {13         sum[p] += x % 10;14         x /= 10;15         p = !p;16     }17     if (sum[0]-sum[1] != 3 && t % 11 == 3)18         return false;19     if (sum[0]-sum[1] == 3 && t % 11 != 3)20         return false;21     return true;22 }23 24 int main()25 {26     __int64 l, r;27     int T;28     while (scanf("%d", &T) != EOF)29     {30         while (T--)31         {32             scanf("%I64d%I64d", &l, &r);33 34             __int64 tmp = l;35             while (tmp <= r)36             {37                 if (!check(tmp))38                     break;39                 tmp++;40             }41             if (tmp > r)42                 printf("-1\n");43             else44                 printf("%I64d\n", tmp);45         }46     }47     return 0;48 }