『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 Gx∈G,则 x+a∈Gx+a\in Gx+a∈G。
- 若 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=3,3+2=53+2=53+2=5,5+2=75+2=75+2=7 不存在,所以这个集合是完善的。
样例 2 解释
剩下的所有整数都属于这个集合。
【数据范围】
- 1≤m<n≤6×1041\le m<n\le6\times10^41≤m<n≤6×104。
- 1≤Ai≤n1\le A_i\le n1≤Ai≤n。
- 0≤a≤1040\le a\le 10^40≤a≤104。
【捆绑测试情况】
| 测试点编号 | 时间限制 | 分数分配 | n,m≤n,m\len,m≤ | 
|---|---|---|---|
| Subtask1\rm Subtask 1Subtask1 | 400ms\rm 400ms400ms | 10pts\rm 10pts10pts | 10310^3103 | 
| Subtask2\rm Subtask 2Subtask2 | 400ms\rm 400ms400ms | 15pts\rm 15pts15pts | 10410^4104 | 
| Subtask3\rm Subtask 3Subtask3 | 400ms\rm 400ms400ms | 35pts\rm 35pts35pts | 3×1043\times 10^43×104 | 
| Subtask4\rm Subtask 4Subtask4 | 400ms\rm 400ms400ms | 40pts\rm 40pts40pts | 6×1046\times 10^46×104 | 
P.S.\rm P.S.P.S. 这题的时限已经开到 std\rm stdstd 的 15\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]+sb[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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
 
                   
                   
                   
                   
                             
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                  
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            