打卡信奥刷题(510)用C++信奥P6586[普及组/提高] 『JROI-1』 蒟蒻火锅的盛宴

『JROI-1』 蒟蒻火锅的盛宴

题目背景

点击展开阅读更佳,题目背景与解题无关。


传说专门服务神仙们的蒟蒻火锅店前面有一首诗:

灶前无用煮青山,不识神炉自往还。

玉碗琼浆谁乞赐,瑶琴银箭可容攀。

风生夜气通云汉,雨歇秋光上碧湾。

却笑老奴真倦眼,此心空处一团闲。


Qiuly 是洛谷著名餐厅“蒟蒻火锅店”的主厨,当中的伙计很多,比如呆呆的 Aw 顿顿,机智的 Cocoly1990 还有珂爱的 45dino。Qiuly 喜欢让顿顿为他准备丰富多样的食材,制作火锅的必需品包括但不限于七星章鱼和芥末鱼子酱,当然,还有各种各样珍稀而奇怪的食材:

  • 蒟蒻果冻制成的蒟蒻团子。
  • 糯米(雾)制成的糯米青团。
  • Aw 顿顿制成的菜鸡糕。
  • Bamboo(45dino)。

这些食材难以收集,但是神仙 Qiuly 还是全部弄到手了。接下来她要让顿顿分类这些食材。但是顿顿是菜鸡,根本不会分类,他崩溃了。于是他请你,IOI 的 AKer,帮助他分类这些食材,因为这个问题事关 Qiuly 的成绩(IOI 第一名还是第二名),所以你必须尽快。

每一个食材都有各种各样的奇怪特性,根据这些特性,Aw 顿顿咨询了全世界的专家们,评价出了一个食材的美味程度,根据这个程度可以有效的分类食材。如果你不能400\bf 400400 毫秒内给出答案,你就会成为一个食材,光荣的沉没在 Qiuly 精心调制的汤底中。

题目描述

nnn 个互不相同的整数,现有 mmm 个整数属于集合 GGG 中。

Aw顿顿规定这个集合有如下规定:

  • x∈Gx\in GxG,则 x+a∈Gx+a\in Gx+aG
  • x+ax+ax+a 不在 nnn 个整数中就不做处理。
  • 若对于一个集合 GGG 不存在需要加入的元素,那么它是完善的。

若集合是完善的,输出 Great Set!,反之输出至少还要按规定加入几个食材才能完善该级别。

输入格式

第一行是一个整数 nnn,表示一共有 nnn 个整数。

接下来一行存在 nnn 个用空格隔开的整数 AiA_iAi互不相同

下一行一个正整数 mmm,表示集合 GGG 当中有 mmm 个整数,均属于 nnn 个整数当中。

接下来一行是 mmm 个用空格隔开的整数。

最后是一个正整数 aaa

输出格式

如果这个集合已经完善,输出 Great Set!

反之输出需要完善该集合所需的整数数量。

样例 #1

样例输入 #1

5
1 2 3 4 5
3
1 3 5
2

样例输出 #1

Great Set!

样例 #2

样例输入 #2

15
13 2 10 3 1 12 8 4 5 7 9 6 15 14 11 
7
13 2 1 12 8 3 10 
2

样例输出 #2

8

样例 #3

样例输入 #3

50
13 2 10 50 1 28 37 32 30 46 19 47 33 41 24 34 27 42 49 18 9 48 23 35 31 8 7 12 6 5 3 22 43 36 11 40 26 4 44 17 39 38 15 14 25 16 29 20 21 45 
10
50 46 30 32 10 2 28 37 1 13 
3

样例输出 #3

31

提示

【样例解释】

样例 1 解释

这个集合包含 1,3,51,3,51,3,5,其中 1+2=31+2=31+2=33+2=53+2=53+2=55+2=75+2=75+2=7 不存在,所以这个集合是完善的。

样例 2 解释

剩下的所有整数都属于这个集合。

【数据范围】

  • 1≤m<n≤6×1041\le m<n\le6\times10^41m<n6×104
  • 1≤Ai≤n1\le A_i\le n1Ain
  • 0≤a≤1040\le a\le 10^40a104

【捆绑测试情况】

测试点编号时间限制分数分配n,m≤n,m\len,m
Subtask1\rm Subtask 1Subtask1400ms\rm 400ms400ms10pts\rm 10pts10pts10310^3103
Subtask2\rm Subtask 2Subtask2400ms\rm 400ms400ms15pts\rm 15pts15pts10410^4104
Subtask3\rm Subtask 3Subtask3400ms\rm 400ms400ms35pts\rm 35pts35pts3×1043\times 10^43×104
Subtask4\rm Subtask 4Subtask4400ms\rm 400ms400ms40pts\rm 40pts40pts6×1046\times 10^46×104

P.S.\rm P.S.P.S. 这题的时限已经开到 std\rm stdstd15\bf 1515 倍,附件内有部分测试点。

C++实现

#include<bits/stdc++.h>
using namespace std;
int n,a[50001],b[50001],m,mx=-1,x,ans,s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>mx)mx=a[i];
}
cin>>m;ans=m;
for(int i=1;i<=m;i++)cin>>b[i];
cin>>s;
for(int i=1;i<=ans;i++){
bool f=false;
if(b[i]+s>mx)continue;
for(int j=1;j<=n;j++)if(b[i]+sa[j]){
f=true;
break;
}
if(!f)continue;
f=false;
for(int j=1;j<=ans;j++)if(b[i]+s
b[j]){
f=true;
break;
}
if(!f)b[++ans]=b[i]+s;
}
if(ans==m)puts(“Great Set!”);
else cout<<ans-m<<endl;
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值