题意:小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;
}