题解 洛谷P6586 【『JROI-1』 蒟蒻火锅的盛宴】
这篇题解简单些,请见谅
一、目录概览
一、目录概览
二、题目大意
三、答题思路
四、代码剖析
二、题目大意
有个集合,还有N个数。
题目保证这个集合里的所有元素都在这N个数里。
我们要找出在这N个数中的其他数中,与集合中的某个元素的差,是a的倍数,那么答案+1,如果答案为0,就输出Great Set!即可。
三、答题思路
这道题目模拟出奇迹。
将这N个数对a取模,分成a个抽屉。
然后将集合中的几个元素所在的抽屉点亮。
将其他的也在点亮的抽屉里的数进行查看:
如果他比那个集合里的数大,那么答案+1。
否则答案不变。
四、代码剖析
-
#include<bits/stdc++.h> using namespace std; int n,m; int x; int a[60001],b[60001]; bool hav[60001],rea[60001]; int modd[10001]; int main() { memset(modd,0x3f3f3f,sizeof(modd)); register int i,j; cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); cin>>m; for(i=1;i<=m;i++) { cin>>b[i]; } cin>>x; for(i=1;i<=m;i++) { hav[b[i]%x]=true,rea[b[i]]=true,modd[b[i]%x]=min(b[i],modd[b[i]%x]); } register int ans=0; for(i=1;i<=n;i++) { if(hav[a[i]%x]&&!rea[a[i]]&&a[i]>modd[a[i]%x]) { ans++; } } if(!ans) { goto loop; } cout<<ans<<endl; return 0; loop: cout<<"Great Set!"<<endl; return 0; }
不要妄图追上西坠的太阳,而是要在黎明前就等着它!