列表

详情


NC220557. 购物

描述

 种商品以及每种商品的数量,有  个人,已知这   个人都已有哪些商品,这些人只会购买他们没有的商品,求这  个人购买完成后,剩余的商品种类数

输入描述

第一行一个正整数  ,代表测试数据的组数

每组测试数据的第一行有两个整数   和  

接下来  行每行一个字符串和一个数字表示一个商品

最后  行,第  行表示第  个人已有的商品,每行先给出一个正整数 ,代表第  个人已有的商品数量,之后有 个字符串,代表第  个人拥有的商品名称

输入保证所有商品名称长度不超过 ,并且所有商品名称都是以英文字母组成,每种商品的数量不会超过 

输出描述

对于每组数据在一行中输出一个整数,表示剩余的商品种类数量

若剩余数量为,请在一行中输出 “Need to be lucky”

示例1

输入:

3
5 4
Tshirt 10
Watch 4
Towel 3
HandLight 10
LimitedBook 1
1 Tshirt
1 Tshirt
2 Tshirt Watch
2 Tshirt HandLight
2 2
LimitedCD 1
Handring 1
1 Handring
1 LimitedCD
2 2
ABCDEFGHIJKLMNOPQRSTUVWXYZ 1
abcdefghijklmnopqrstuvwxyz 1
1 ABCDEFGHIJKLMNOPQRSTUVWXYZ
1 ABCDEFGHIJKLMNOPQRSTUVWXYZ

输出:

3
Need to be lucky
1

原站题解

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

C(clang11) 解法, 执行用时: 7ms, 内存消耗: 224K, 提交时间: 2021-04-17 20:55:21

#include<stdio.h>
#include<string.h>
int main()
{
int i,a,b,c,d=0,e,t,nh,s,n,k,fh[110],number[110];
char f[110][150],sh[150];
scanf("%d\n",&t);
while(t--)
{
	memset(number,0,440);
c=d=0;
scanf("%d%d\n",&s,&n);
k=s;
while(s--)
{
	d++;
scanf("%s",f[d]);
scanf("%d\n",fh+d);
}
d=n;
while(n--)
{
scanf("%d",&nh);
getchar();
 while(nh--)
 {
 scanf("%s",sh);
 for(i=1;i<=k;i++)
 if(strcmp(f[i],sh)==0)
	 number[i]++;
 }
}
for(i=1;i<=k;i++)
   if(fh[i]+number[i]-d>0)
     c++;
if(c==0)
printf("Need to be lucky\n");
else
printf("%d\n",c);
}
return 0;
}

pypy3(pypy3.6.1) 解法, 执行用时: 108ms, 内存消耗: 25200K, 提交时间: 2021-04-17 21:27:54

t = int(input())
for i in range(t):
    goods = {}
    awn = 0
    goods_total = set()
    s , n = list(map(int, input().split()))
    for j in range(s):
        good , cou = input().split()
        goods_total.add(good)
        goods[good] = int(cou)
    for k in range(n):
        z = set(list(input().split())[1:])
        c = goods_total - z
        for qwe in c:
            goods[qwe] -= 1
    for l in goods:
        if goods[l] > 0:
            awn += 1
    if awn == 0:
        print('Need to be lucky')
    else:
        print(awn)

C++(clang++11) 解法, 执行用时: 20ms, 内存消耗: 356K, 提交时间: 2021-04-17 19:56:00

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int s,n;
		cin>>s>>n;
		map<string,int >st;
		for(int i=1;i<=s;i++)
		{
			string a;
			int b;
			cin>>a>>b;
			st[a]=b;
		}
		for(int i=1;i<=n;i++)
		{
			int z;
			cin>>z;
			for(int i=0;i<z;i++)
			{
				string l;
				cin>>l;
				st[l]++;
			}
		}
		int num=0;
		for(auto p:st)
		{
			if(p.second-n>0) num++;
		}
		if(num==0) cout<<"Need to be lucky"<<endl;
		else cout<<num<<endl;
	}
}

Python3(3.9) 解法, 执行用时: 63ms, 内存消耗: 6776K, 提交时间: 2021-04-17 19:38:01

T=int(input())
while T:
    s=input().split()
    m=int(s[0])
    n=int(s[1])
    dic={}
    for i in range(0,m):
        s=input().split()
        dic[s[0]]=int(s[1])
    for i in range(0,n):
        s=input().split()
        for j in range(0,int(s[0])):
            dic[s[j+1]]+=1
    ret=0
    for i in dic:
        if dic[i]-n > 0:
            ret+=1
    if ret > 0:
        print(ret)
    else:
        print('Need to be lucky')
    T-=1

上一题