如果杠铃总质量是奇数直接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[][] = {}; int main(){
int T;
scanf("%d",&T);
while(T--){
int cnt = ;
int big_flag = ;
memset(sum,,sizeof(sum));
scanf("%d%d%d",&a,&b,&c);
if(c & ){
printf("Impossible\n");
}
else{
//let b is bigger than a
if(a > b){
int t = a;a = b;b = t;
big_flag = ;
}
for(int i = (c/)/b;i >= ; i --){
if(((c/) - b *i)%a==){
sum[cnt][] = *((c/)-b*i)/a;
sum[cnt][] = *i;
cnt++;
}
}
if(sum[][] == && sum[][]==){
printf("Impossible\n");
}
else{
int flag = ;
int minn = sum[][] + sum[][];
for(int i = ;i < cnt ;i++){
if(minn >= sum[i][]+ sum[i][]){
minn = sum[i][]+ sum[i][];
flag = i;
}
}
if(!big_flag){
printf("%d %d\n",sum[flag][],sum[flag][]);
}
else{
printf("%d %d\n",sum[flag][],sum[flag][]);
}
}
}
} return ;
}
等个明后天把1002题补了。立个FLAG
代码效率不高,速度很慢。主要是在年月日的判断上先判断谁还可以优化一下。但是还算浅显易懂。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector> #define rep(i,a,n) for(int i = a;i < n;i++)
#define per(i,a,n) for(int i = n-1;i >=a;i--)
#define pb push_back
#define VI vector<int>
#define QI queue<int> typedef long long ll; using namespace std; int a,b,n;
char ch[] = {};
int num[] = {}; int check(){
int flag = ;
rep(i,,) if(num[i]!=num[i+]) flag = ;
if(flag == ) return ; flag = ;
rep(i,,) if(num[i]!=num[i+]-) flag = ;
if(flag == ) return ; flag = ;
rep(i,,) if(num[i]!=num[i+]+) flag = ;
if(flag == ) return ; /*NOTE:
PHONE NUMBER SAMPLE 138-1997-05-06
012 3456 78 9[10]
*/
int y = num[] * + num[] * + num[] * + num[];
int m = num[] * + num[];
int d = num[] * + num[];
if(y < || y > ){
return ;
}
else{
if(m < || m > ){
return ;
}
else{
if(m == || m == || m == || m == || m == || m == || m == ){
if(d < || d > ){
return ;
}
else{
return ;
}
}
else{
if(m == ){
if((y%==&&y%==)||(y%!=&&y%==)){
if(d < || d > ){
return ;
}
else{
return ;
}
}
else{
if(d < || d > ){
return ;
}
else{
return ;
}
}
}
else{
if(d < || d > ){
return ;
}
else{
return ;
}
}
}
}
}
} int main(){
int T;
scanf("%d",&T);
while(T--){
ll sum = ;
scanf("%d%d%d",&n,&a,&b);
rep(i,,n+){
scanf("%s",ch);
rep(j,,){
num[j] = ch[j] - '';
}
if(check()){
sum += a;
}
else{
sum += b;
}
}
cout<<sum<<endl;
}
return ;
}
剩下的两道真的有空再补,立FLAG