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