题解 | #教科书般的亵渎#
教科书般的亵渎
https://ac.nowcoder.com/acm/problem/21442
把所有Q=2的情况转化为Q=1的情况,每个元素-=1就行
Q=0时有非空元素失败
排序后从第一个大于0的元素开始遍历
第一个元素>1直接失败
后检查每一个元素是不是和之前元素的差值<=1
#include <algorithm>
#include <array>
#include <bitset>
#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int m,n,Q;cin>>m>>n>>Q;
vector<int> panel;
int temp;
for(int i = 0;i<m+n;++i){
scanf("%d",&temp);
if(Q>1) temp--;
panel.emplace_back(temp);
}
if(Q>1) Q--;
sort(panel.begin(),panel.end());
int idx = 0;
for(int i = 0;i<panel.size();++i){
if(panel[i] <= 0) idx++;
}
bool flag = false;
for(int i = idx;i<panel.size();++i){
if(i == idx) {
if(panel[i]!=1){
Q = 0;
flag = true;
break;
}
continue;
}
if(panel[i] - panel[i-1] > 1){
Q = 0;
flag = true;
break;
}
}
if(Q==0 && flag){
cout<<"GG"<<'\n';
}else {
cout<<"Legendary"<<'\n';
}
}
return 0;
}