| 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;
}
本文介绍了一道关于C语言取模运算的问题及其解决方案。题目要求编写程序计算一系列数字进行连续取模操作后的结果,通过优化算法提高效率。


421

被折叠的 条评论
为什么被折叠?



