暑假训练第二周第一天

题意:
A(CodeForces - 1257B):一个数如果是偶数可以选择乘以3/2,如果大于1可以选择减一同时满足可以选择任意操作。给你两个数a和b,问能否通过操作让a变成b。
题解:
A CodeForces - 1257B
思路:刚看完题目想着是递归判断,冷静了一下,发现a是可以得到所有比a小的数的(一直减一)。试着把a=1,2,3,4列出来,a=1,b=1;a=2,b=1或2或3;a=3;b=1或2或3;a=4,b=1,2,3,4,5,6……(无上限)。这样的的话,比4大的数也都是可以取到任意数。
代码:

#include
using namespace std;
int t,x,y;
int main()//x=1 y=1  x=2 y=1|2|3  x=3 y=1|2  x=4 y=1|2|3|5|6...  x=5 y=1|2|3|4..
{
cin>>t;
while(t--){
    cin>>x>>y;
   if((x==1&&y>1)||(x==2&&y>3)||(x==3&&y>3))
   cout<<"NO"<<endl;
        else
        cout<<"YES"<<endl;
}
}

感想:今天的训练算是复习吧,就一个新题。思维题基本看完题目就有思路了,算法题的话还是太弱了,贪心策略的选择还是有问题。回看之前的补题CodeForces 1257D感觉现在理解的差不多了,但其他的题感觉还是差了点。

你可能感兴趣的:(暑假训练第二周第一天)