题意:对给定正整数 m 和 q,总有一个边长为 a,b,c 的三角形,是满足 a % m + b % m = c % m = q 的条件的三角形中周长最小的。
思路:构造法。首先应该明白,这样的三角形一定存在。
从淘神转的:
使A=a+k1*m,B=b+k2*m,C=c+k3*m,则有a+b=c=q k1+k2>k3
1. q=0 为了使三角形的周长最小 则k1=k2=k3=1
2. q=1 因为m是大于等于2的 此时最小值为 a=1 b=0 c=1 k1=1,k2=1,k3=1
3. q>=2
(1) 2*q>m 此时的最小值为 a=q b=0 c=q
k1=0 k2=1 k3=0
(2)2*q<=m 此时的最小值为 a=q b=0 c=q
k1=1 k2=1 k3=0
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <iostream>
#include <map>
#include <queue>
#include <stack>
using namespace std;
int main(void){
//freopen("input.txt","r",stdin);
int T;
scanf("%d", &T);
for(int i = 1; i <= T; ++i){
int m,q;
scanf("%d %d",&m,&q);
printf("Case %d: ",i);
if(2 * q > m)
printf("%d\n",2 * q + m);
else if(q == 0 || q == 1)
printf("%d\n",2 * q + 3 * m);
else
printf("%d\n",2 * q + 2 * m);
}
return 0;
}