题目大意:给出梯子的步数,可以走一步,也可走两步。要求找到走的次数是M的倍数的最小值。
解题思路:简单推一下就可以发现,次数的范围为[n/2,n]之间,因此直接从n/2开始模拟找到m的倍数就输出。这里要注意下n为奇偶的情况,起点不一样的,详见code。
题目来源:http://codeforces.com/contest/476/problem/A
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n,m,flag,ans;
int main(){
//freopen("input.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
flag=0;ans=0;
if(n<m){printf("-1\n");continue;}
else{
if(n&1){
for(int i=(n+1)/2;i<=n;++i)
if(i%m==0){
ans=i;
flag=1;
break;
}
}
else for(int i=n/2;i<=n;++i){
if(i%m==0){
ans=i;
flag=1;
break;
}
}
if(flag)printf("%d\n",ans);
else printf("-1\n");
}
}
return 0;
}