如果杠铃总质量是奇数直接impossible
接着就考验耐心和仔细周全的考虑了。在WA了三次后终于发现问题了,想对自己说是不是撒
首先最好从大的那个开始考虑,我的方案就是两数交换一下,结果输出的时候没有考虑。。。
然后就是要求a+b最小,那么循环就要从大的开始向小的循环。
其实我也解释不清楚,更解释不清楚的是学长取名的Baby Nero,一直以为铭铭姐是女的的我,在看到真的铭神的照片的时候惊呆了
比赛时候的渣代码:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
int a,b,c;
int sum[100005][3] = {};
int main(){
int T;
scanf("%d",&T);
while(T--){
int cnt = 0;
int big_flag = 0;
memset(sum,0,sizeof(sum));
scanf("%d%d%d",&a,&b,&c);
if(c & 1){
printf("Impossible\n");
}
else{
//let b is bigger than a
if(a > b){
int t = a;a = b;b = t;
big_flag = 1;
}
for(int i = (c/2)/b;i >= 0; i --){
if(((c/2) - b *i)%a==0){
sum[cnt][0] = 2*((c/2)-b*i)/a;
sum[cnt][1] = 2*i;
cnt++;
}
}
if(sum[0][0] == 0 && sum[0][1]==0){
printf("Impossible\n");
}
else{
int flag = 0;
int minn = sum[0][0] + sum[0][1];
for(int i = 0;i < cnt ;i++){
if(minn >= sum[i][0]+ sum[i][1]){
minn = sum[i][0]+ sum[i][1];
flag = i;
}
}
if(!big_flag){
printf("%d %d\n",sum[flag][0],sum[flag][1]);
}
else{
printf("%d %d\n",sum[flag][1],sum[flag][0]);
}
}
}
}
return 0;
}
等个明后天把1002题补了。立个FLAG
BestCoder Round 69 Div 2 1001 && HDU 5610
原文:http://www.cnblogs.com/syuritsu/p/5155579.html