Mod (二分法)

我不是女神ヾ 2022-06-09 04:19 238阅读 0赞

Kim刚刚学会C语言中的取模运算(mod)。他想要研究一下一个数字A模上一系列数后的结果是多少。帮他写个程序验证一下。

Input

第一行一个整数T代表数据组数。

接下来T组数据,第一行一个整数n,接下来n个数字ai

接下来一行一个整数m,接下来m个数字bi。

Output

对于每个bi,输出bi%a1%a2%…%an 。

Sample Input

  1. 1
  2. 4
  3. 10 9 5 7
  4. 5
  5. 14 8 27 11 25

Sample Output

  1. 4
  2. 3
  3. 2
  4. 1
  5. 0

Hint

在C语言中,A mod B 是 a%b

样例解释:

14%10%9%5%7=4

8%10%9%5%7=3

数据范围:

1<=n<=100000

1<=m<=100000

1<=ai<=1000000000

0<=bi<=1000000000

  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4. #define INF 0x3f3f3f3f
  5. int a[100005];
  6. int main()
  7. {
  8. int t, n, m, tmp, cnt;
  9. scanf("%d",&t);
  10. while(t--)
  11. {
  12. int ok=0,s;
  13. scanf("%d",&n);
  14. a[0] = INF;
  15. cnt = 1;
  16. while(n--)
  17. {
  18. scanf("%d",&tmp);
  19. if(ok==0)
  20. s=tmp;
  21. ok=1;
  22. if(tmp < a[cnt-1])
  23. {
  24. a[cnt] = tmp;
  25. cnt++;
  26. }
  27. }
  28. scanf("%d",&m);
  29. while(m--)
  30. {
  31. scanf("%d",&tmp);
  32. int l=2, r=cnt-1;
  33. tmp%=s;//第一个必须要取模
  34. while(1)
  35. {
  36. while(l<r)
  37. {
  38. int mid = (l+r)>>1;
  39. if(tmp < a[mid])
  40. l = mid+1;
  41. else
  42. r = mid;
  43. }
  44. tmp %= a[r];
  45. l = r;
  46. r = cnt-1;
  47. if(tmp<a[r])
  48. break;
  49. }
  50. printf("%d\n",tmp);
  51. }
  52. }
  53. return 0;
  54. }

发表评论

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

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

相关阅读

    相关 Mod二分法

    Kim刚刚学会C语言中的取模运算(mod)。他想要研究一下一个数字A模上一系列数后的结果是多少。帮他写个程序验证一下。 Input 第一行一个整数T代表数据组数。 接下来

    相关 二分法查找

    二分法查找 当线性表中数据元素是按大小排列存放时,可以改进顺序查找算法,以得到更高效率的新算法——二分法 (折半查找)。 ![这里写图片描述][SouthEast]