列表

详情


NC21442. 教科书般的亵渎

描述

可爱的小雪最近沉迷一款叫做《炉石传说》的游戏,他特别喜欢玩术士这个职业,“偶数术强无敌!(破音)”,小雪经常边打边这么叫着。这个月小雪打算上传说,然而就在渡劫局的时候,小雪遇到了困境。此时小雪场上有m个随从,对方场上有n个随从,但是发现对手的场面非常强势,而小雪手里只有Q张法术卡“亵渎”,这张卡的效果是,对场上的所有随从(不分敌我)造成1点伤害,如果有随从因此死亡(随从生命值为0时则死亡),则再次发动此效果(不消耗额外的“亵渎”卡)。你可以帮帮小雪让他清理场面助他渡劫成功吗?

输入描述

第一行是一个正整数T,代表输入数据的组数。每组数据的第一行有三个整数,m,n,Q。m为小雪场上的随从数量,n为对手场上的随从数量(m,n不大于7),Q(0<=Q=<2)为小雪手上的“亵渎”卡的数量。第二行有m个整数ai,分别为小雪场上随从的生命值。第三行有n个整数bi,分别为对手场上随从的生命值。(生命值最大不超过99)

输出描述

对于每组输入数据,如果可以令对手场上的随从全部死亡,则输出“Legendary”(没有引号),否则输出“GG”(没有引号)。

示例1

输入:

2
2 2 1
1 2
3 4
6 6 2
1 1 4 5 1 4
1 9 1 9 8 10

输出:

Legendary
GG

说明:

对于第一组数据,对面和自己都有2个随从,发动“亵渎”后,第一次使生命值为1的随从死亡,然后再次生效,重复三次后,所有随从死亡,那么小雪渡劫成功,输出Legendary。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2023-07-25 09:43:33

#include<iostream>
using namespace std;
typedef long long ll;
#include<algorithm>
#include<vector>


int main() {
	int t;
	cin >> t; 
	while (t--) {
		int a[100] = { 0 };
		int m, n, Q;
		cin >> m >> n >> Q;
		int sum = 0, t,maxn = 0;
		for (int i = 0; i < m; i++) {
			cin >> t;
			a[t] = 1;
		}
		for (int i = 0; i < n; i++) {
			cin >> t;
			a[t] = 1;
			maxn = max(maxn, t);
		}
		for (int i = 1; i <= maxn; i++) {
			if (a[i] == 0)sum++;
		}
		if (sum < Q)cout << "Legendary" << endl;
		else cout << "GG" << endl;
	}
}

C(clang 3.9) 解法, 执行用时: 4ms, 内存消耗: 476K, 提交时间: 2020-02-18 20:43:51

#include <stdio.h>
int main()
{
	int T,m,n,Q,i,j,counter,t;
	int x[14];
	scanf("%d",&T);
	while(T)
	{
		counter=0;
		scanf("%d%d%d",&m,&n,&Q);
		for(i=0;i<m+n;i++)
			scanf("%d",&x[i]);
		for(i=0;i<Q;i++)
		{
			t=counter;
			for(j=0;j<m+n;j++)
				x[j]--;
			for(j=0;j<m+n;j++)
			{
				if(x[j]==0)
					counter++;
			}
			if(t!=counter)
				Q++;
		}
		if(counter==m+n)
			printf("Legendary");
		else
			printf("GG");
		printf("\n");
		T--;
	}
	return 0;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 456K, 提交时间: 2022-03-23 21:25:11

#include<bits/stdc++.h>
using namespace std;	
int a[200];
int main()
{
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		int m,n,k,sum=0,maxx=0,tt;
		cin>>m>>n>>k;
		memset(a,0,sizeof(a));
		for(int i=1;i<=m;i++)
		{
			cin>>tt;
			a[tt]=1;
		}
		for(int i=1;i<=n;i++)
		{
			cin>>tt;
			a[tt]=1;
			if(tt>maxx)
				maxx=tt;
		}
		for(int i=1;i<=maxx;i++)
		{
			if(a[i]==0)
			sum++;
		}
		if(sum>=k)
			printf("GG\n");
		else
			printf("Legendary\n");
	}
}

pypy3(pypy3.6.1) 解法, 执行用时: 44ms, 内存消耗: 18776K, 提交时间: 2020-08-28 15:36:48

for _ in range(int(input())):
    n, m, q = map(int, input().split())
    nl = list(map(int, input().split()))
    ml = list(map(int, input().split()))
    kl = nl + ml
    kl.sort()
    t = 0
    ans = 0
    for x in kl:
        if x > t + 1:
            ans += x - t
            t = x
        elif x == t + 1:
            t += 1
    if ans > q:
        print('GG')
    else:
        print('Legendary')



上一题