【CF1255A】Changing Volume【思维】

题意:每次可以-5/-2/-1/+1/+2/+5,问是否存在方案使得A变成B

题解:首先我们可以设A<B,若A>B,则交换AB,因为A到B和B到A是互逆的过程,所以可以交换

其次将B-=A,因为从3到5和从0到2是一样的

这样题目转化为每次可以-5/-2/-1/+1/+2/+5,问是否存在方案总和为B

若一种方案同时存在加法和减法,那么相互抵消之后,同一个数只存在加法或减法,即-5+1+2是合法的,而-5+1+2+5不是,因为没有抵消完

观察经过次数可以达到的数

一:1 2 5

二:1 2 3 4 5 6 7 10

三:1 2 3 4 5 6 7 8 9 10 11 12 15

容易看出如果B为1/2/5则一次即可达到

如果B为5的倍数,则B/5次可以达到

否则设次数为i,则需要满足(i-1)*5+2>=B且(i-2)*5+2<B

容易解出i=(B-3)/5+2

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int T;
int a,b;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
      scanf("%d%d",&a,&b);
      if(a>b)swap(a,b);
      b-=a;
      if(b==1 || b==2 || b==5)printf("1\n");
      else 
      {
        if(b%5==0)printf("%d\n",b/5);
        else printf("%d\n",(b-3)/5+2);
      }
    }
    return 0;
}

 

posted @ 2019-11-25 12:10  worcher  阅读(230)  评论(0编辑  收藏  举报