首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。