题目链接:http://newoj.acmclub.cn/problems/2001
当时没写出来,后来看别人博客得出的。
参考:https://blog.csdn.net/viewsetting/article/details/80296269
题意:有N个神仙,主人公太阳神在里面排第M名。
想知道到底,它的运气最好时,他能进入第几轮。
模拟题:后来才知道是怎么回事:
把比他厉害的设为 a 比他菜的设为 c
以下: 比他弱的称为 C 吧, 比他强的称为:A 吧。他就称为:B吧。
C的人数为: C ,A的人数为 :A ,B的人数 :1 (太阳神本身)
首先设置循环条件:
1、当存在 C 时,证明 B 一定能坚持这一个回合。
2、当存在 A%2==0 &&C==0 时,证明 A的个数为偶数,且没有C和它比了 (坐山观虎斗)
3、当存在 A==0 && C==1 时,必须要跳出循环,因为一开始就说明 A==0了,
题目给定太阳的排名就是第一 这样y才有可能等于0,这个就是决胜圈。
面对上述都是我对博客的深切解读,但是代码是别人的,我尊重原创,但是我也是不会,
才写的博客来记录这道题的,希望原创博主能宽恕我。
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int n,m,t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); int L=1; int A=m-1; int C=n-m; while( ( C || ( A%2==0 && C==0 ) ) && !( A==0 && C==1 ) ){ if( C>0 ) C--; if( A%2 && C >0){ C--; } if(C){ C=C/2+C%2; } A=A/2+A%2; L++; } printf("%d\n",L); } return 0; }