2019年南邮Wishare杯H题

版权声明:转载标注来源喔~ https://blog.csdn.net/iroy33/article/details/89680404

题意:小A要发布一个视频展现他优秀的球技,视频有n帧,小A有m个粉丝,如果同时有两个以上的粉丝看到他秀球技的一帧,该视频就会被广为传播,导致所有的粉丝发疯。每个粉丝会在y=ka+r时刻看视频,问小A可以在多少帧里炫技?0<a<=100,0<=r<a,n,m<=1e5(数据量大概是这个样子的,习题册忘记带回来了)

思路:(我以为考点是中国剩余定理,我以为我A不了题是因为我不会中国剩余定理,蠢哭了)

遍历每一帧,遍历每一个a,加上帧数mod a为r的粉丝数,就是该帧会有多少粉丝看到。思考的切入点可以为数据量,a比较小

大佬说是水题,也有好几个人做出来了,这种思路我觉得很巧妙,比赛的时候认真想可能也想不到,大概还是我太菜了叭

这是美丽的队友的代码,比赛网址我找不到了就直接贴她的了

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int N, M;
int vis[110];
int cnt[maxn];



int main()
{
    cin >> N >> M;
    int a, r;
    for(int i = 0; i < M; i++)
    {
        cin >> a >> r;
        vis[a] = 1;
        occur[a][r]++;
    }

    for(int i = 0; i < N; i++)              //cnt[i]是i时刻会有多少粉丝看到
    {
        for(int j = 1; j <= 100; j++)
        {
            if(vis[j])                      //
            {
                int t = i % j;
                if(occur[j][t]) cnt[i] += occur[j][t];         //occuer[a][r]是mod a 余 r时刻的粉丝总数
            }
        }
    }
    int ans = 0;
    for(int i = 0; i < N; i++)
    {
        if(cnt[i] <= 2) ans++;
    }
    cout << ans << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/iroy33/article/details/89680404