Mod | ||||||
| ||||||
Description | ||||||
Kim刚刚学会C语言中的取模运算(mod)。他想要研究一下一个数字A模上一系列数后的结果是多少。帮他写个程序验证一下。 | ||||||
Input | ||||||
第一行一个整数T代表数据组数。 接下来T组数据,第一行一个整数n,接下来n个数字ai 接下来一行一个整数m,接下来m个数字bi。 | ||||||
Output | ||||||
对于每个bi,输出bi%a1%a2%...%an 。 | ||||||
Sample Input | ||||||
1 4 10 9 5 7 5 14 8 27 11 25 | ||||||
Sample Output | ||||||
4 3 2 1 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 | ||||||
Source | ||||||
"科林明伦杯"哈尔滨理工大学第六届程序设计团队赛 |
# include <stdio.h>
# define MAXN 100000
# define INF 0x3f3f3f3f
int a[MAXN+3];
int main()
{
int t, n, m, tmp, cnt;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
a[0] = INF;
cnt = 1;
while(n--)
{
scanf("%d",&tmp);
if(tmp < a[cnt-1])
a[cnt++] = tmp;
}
scanf("%d",&m);
while(m--)
{
scanf("%d",&tmp);
int l=1, r=cnt-1;
while(1)
{
while(l<r)
{
int mid = (l+r)>>1;
if(tmp < a[mid])
l = mid+1;
else
r = mid;
}
tmp %= a[r];
l = r;
r = cnt-1;
if(r==cnt-1 && tmp<a[r])
break;
}
printf("%d\n",tmp);
}
}
return 0;
}