这道题真的…我读了半个小时都没读懂啥意思,结果队友一来说就是降级,我说啥?怎么降的?
我感觉是我游戏玩少了吗?
题意:给你初始的A,B和N分别表示刚开始的主等级,副等级,N次操作;然后问你经过N次操作他的A-B为多少?
看到这里我相信,你肯定有点懵逼,QAQ;
比如第一个案例:
就是这个意思;
不断的把B=A,A=1;然后中间一个while来变形1步骤,但问题在于怎么结束循环呢?因为N很大1e9,其实题上有一个1-1时候结束,还有一个就是第二个案例的1-3====3-1所以有了这两个结束条件,就可以搞定了,我去呢,什么题,读题都很消耗时间了。。。。。。。。。(:
注意这里经验值Li必须<B才能升级哈,所以while循环哪里容易出问题!!这个有点反常规,我感觉,平常打游戏不是到了经验值就升级了吗????…
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll T;
ll A,B,N;
ll L[100050];
scanf("%lld",&T);
ll g=1;
while(T--){
memset(L,0,sizeof(L));
scanf("%lld %lld %lld",&A,&B,&N);
for(int i=1;i<=A;i++){
scanf("%lld",L+i);
}
ll tA=1,tB=A;
while(N--){
B=A;A=1;//这里就是根据题意把A变成1,B变成A,然后看看会不会在A的等级上继续升级
while(L[A]<B){
B-=L[A];
A++;
//cout<<A<<" "<<B<<endl;
}
if(A==1&&B==1)break;///如果一直为1--1就没有必要进行下去了
if(tA==B&&tB==A)break;//如果来回相等就没有必要进行下去了
tA=B;tB=A;//记录这次的值,一遍后面看看变来变去是不是 循环的比如1--3 变成3--1,所以就没必要下去了
}
printf("Case #%lld: %lld-%lld\n",g++,A,B);
}
return 0;
}