分析:对于q个问题中,在数组ans的每个区间a[i],到b[i]之间的最大公约数是c[i],所以取ans[i]为ans[i]和c[i]的最小公倍数。之后还要在对q个问题的答案检验一遍。
# include <stdio.h>
__int64 gcd(__int64 a,__int64 b)
{
return b==0 ? a:gcd(b,a%b);
}
__int64 lcm(__int64 a,__int64 b)
{
return a*b/gcd(a,b);
}
int main()
{
int i,j,k,n,q,t,a[1010],b[1010],c[1010];
__int64 ans[1010];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
for(i=1;i<=n;i++)
ans[i]=1;
for(i=1;i<=q;i++)
{
scanf("%d%d%d",&a[i],&b[i],&c[i]);
for(j=a[i];j<=b[i];j++)
ans[j]=lcm(ans[j],c[i]);
}
for(i=1;i<=q;i++)
{
k=ans[a[i]];
for(j=a[i]+1;j<=b[i];j++)
k=gcd(k,ans[j]);
if(k!=c[i])
break;
}
if(i<=q)
printf("Stupid BrotherK!\n");
else
{
for(i=1;i<n;i++)
printf("%I64d ",ans[i]);
printf("%I64d\n",ans[i]);
}
}
return 0;
}
1244

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



