#include <stdio.h>
#include <math.h>
int main()
{
int T,n,a,b,min;
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
scanf("%d%d%d",&n,&a,&b);
if(a<=pow(10,9)&&b<=pow(10,9)&&n>=1)
{
if(n<=2)
{
if(a>b)
printf("%d",b);
else
printf("%d",a);
}
else
{
if((a*1.0/2)<(b*1.0/3))
{
if(n%2==0)
printf("%d",a*(n/2));
else
{
if((a*(n/2)+a)<(a*((n/2)-1)+b))
printf("%d",a*(n/2)+a);
else
printf("%d",(a*((n/2)-1)+b));
}
}
else
{
if(n%3==0)
printf("%d",b*(n/3));
else if(n%3==1)
{
min=b*(n/3)+a;
if(min>b*(n/3)+b)
min=b*(n/3)+b;
if(min>b*((n/3)-1)+a*2)
min=b*((n/3)-1)+a*2;
printf("%d",min);
}
else
{
if((b*(n/2)+a)>(b*(n/2)+b))
printf("%d",b*(n/2)+b);
else
printf("%d",b*(n/2)+a);
}
}
}
}
if(i!=T)
printf("\n");
}
return 0;
}
第50行这段else判断,应该是n/3,不是n/2
x86-64定义了一些整数和逻辑操作,大多数操作都分成了指令类,如下图所示:
这些操作被分为四组: 加载有效地址、一元操作、二元操作和移位。二元操作有两个操作数,而一元操作有一个操作数。