这个题本身描述应该是不清的,让别人全靠数据瞎摸索的小屁孩题。
并不是每个随从都激发一次免费技能,而是这一回合本方死了任意个随从激发一次,对方死了任意个随从激发一次。
#include<bits/stdc++.h>
using namespace std;
int m,n,q,mv[9],nv[9];
void read(){
cin>>m>>n>>q;
for(int i=0;i<m;i++){
cin>>mv[i];
}
for(int i=0;i<n;i++){
cin>>nv[i];
}
}
bool math(){
int mp=0,np=0; //最小值所在下标
int cnt=0; //技能+免费技能
sort(mv,mv+m); //排序易于计算
sort(nv,nv+n);
while(q>0&&np<n){ //还有技能并且还没打败
q--; //开一下头
int cur=1; //本次用了多少个技能(+免费)
for(int i=1;i<=cur;i++){ //用到没了
if(mv[mp]-cnt-i==0){ //减没了一个
cur++; //增加一次
mp++; //减下一个
}
if(nv[np]-cnt-i==0){
cur++;
np++;
}
}
cnt+=cur; //本次产生的技能数
cout<<cnt<<"--"<<np<<endl;
}
return nv[n-1]<=cnt; //对方全灭
}
int main(){
int t;
cin>>t;
while(t--){
read();
if(math()){
cout<<"Legendary"<<endl;
}else{
cout<<"GG"<<endl;
}
}
return 0;
}从AC代码逻辑可以看出,是当这个随从的血量减去过去的减血和当前的连续减血==0时,所以当一群随从都是1时,第二个随从在计算时该值<0,白死而已。
如果按题面描述,不分敌我,死了一个激活一次免费技能,那么下面的代码应该可以正确工作:
bool math(){
int p=0;
sort(v+1,v+x+1); //排序易于计算
for(p=1;p<=x;p++){
if(v[p]<=q){
q++;
}
}
return v[n-1]<=q; //对方全灭
}如果不分阵营只激发一次,那么下面代码可以AC:
bool math(){
int p=0;
sort(v+1,v+x+1); //排序易于计算
for(p=1;p<=x;p++){
if(v[p]<=q && v[p]!=v[p-1]){
q++;
}
}
return v[n-1]<=q; //对方全灭
}事实是什么呢?
出题如戏,全靠演技,数据入海,全都靠猜。



京公网安备 11010502036488号