uva 11490 ——Just Another Problem

青旅半醒 2022-08-09 13:48 122阅读 0赞

题意:刚开始并没有看懂,耐着性子硬读下去,才勉强弄懂大意,英语也要加强训练啊!
题目是说你有s行c列士兵,然后带着他们去打仗,为了虚张声势,在士兵的中间缺了两个边长为r的洞,且这两个洞四个方向的厚度是一样的,理解可能不大好理解,但是画一下就明了了,题目中也有相关的图,这个应该能yy到,然而重点是要求的问题和这个刚好一反,要求的是给定n个人,问这个洞有多大(问可能会缺少多少人)

思路:设中间两个洞的边长为r,洞的四个方向的厚度为c 那么极易推出(2r+3c)*(r+2c) —2r^2= n ,稍微化简可以得到 6c^2+7cr=n,即c(6c+7r)=n, c是n的约数,那么只要对n进行因式分解,对分解的因数一一枚举,那么就可以求出所有的可能性,没必要把因式分解后然后排序,没有必要,如果外加拉宾—米勒的素数判别,速度会更快!

code:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <string>
  7. using namespace std;
  8. typedef long long ll;
  9. const ll mod=100000007;
  10. int main()
  11. {
  12. ll n;
  13. while (~scanf ("%lld",&n)&&n)
  14. {
  15. int f=1;
  16. for (ll i=1;i<(ll)sqrt(1.0*n/6+0.5);i++) //依次按顺序分解枚举因子
  17. {
  18. ll t=n-6*i*i;
  19. if (t%(7*i)==0)
  20. {
  21. ll ans=t/(7*i)%mod;
  22. ans=2*ans*ans%mod;
  23. printf("Possible Missing Soldiers = %lld\n",ans);
  24. f=0;
  25. }
  26. }
  27. if (f)
  28. printf("No Solution Possible\n");
  29. printf("\n");
  30. }
  31. }

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读

    相关 uva 11269——Setting Problems

    题意:一共有n个问题,每个问题都有相应的s和g段,必须先解决s,然后才能解决g,两个人解决问题,问怎么解决使得总耗时最小。 思路:贪心。按照A.s\+max(A.g

    相关 uva 11093——Just Finish it up

    题意:环形跑道上有n个加油站,每个站可以加pi单位的油,从当前站开到下一站需要qi的油,问是否能够环游一圈。 思路:枚举。首先如果总需求量>总供给量,那么不可能。否

    相关 uva 11490 ——Just Another Problem

    题意:刚开始并没有看懂,耐着性子硬读下去,才勉强弄懂大意,英语也要加强训练啊! 题目是说你有s行c列士兵,然后带着他们去打仗,为了虚张声势,在士兵的中间缺了两个边长为r的洞