题解 洛谷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; 
    }
    View Code
posted @ 2020-08-08 14:45  Bushuai_Tang  阅读(184)  评论(1编辑  收藏  举报