专栏文章

题解:UVA10050 Hartals

UVA10050题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqcndkq
此快照首次捕获于
2025/12/04 02:37
3 个月前
此快照最后确认于
2025/12/04 02:37
3 个月前
查看原文
意外发现了一道红题

题目意思

总共有 nn 个人,他们分别在 A[i]A[i] 的倍数天罢工,但是如果罢工的日子是周六或者周日也就是周末,那就不算罢工,求 nn 天中其余罢工的天数。

思路

模拟 + 暴力,我们可以在每一次输入的时候就从 11 遍历到 nn,如果他罢工了且不在周末,那么就打上一个标记,最后的答案只需要统计一下了。

AC Code

CPP
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cstdio>
using namespace std;
#define ll long long
using namespace std;
ll A[1000000];//标记数组
ll B[1000000];
ll sum;
int main()
{
	ll t,n,m,i,j;
	cin >> t; 
	while(t--)//t组数据
	 
		cin >> n >> m;
		memset(A,0,sizeof(A));
		for(i = 1;i <= m;i++)
		{
			cin >> B[i];//根据题意输入m个数 
		}
		ll day;	
		for(i = 1;i <= m;i++)
		{
			for(j = 1;j <= n;i++)
			{
				day = j % 7;
				if(day != 6 && day != 0)//不是周末
				 
					if(j % B[i] == 0)//如果是B[i]的倍数
					 
						A[i] = 1;//标记为一 
					} 
				}
			}
		}
		for(i = 1;i <= n;i++)
		{
			sum += A[i];//求和,也可以在标记时直接加
		}	
		cout << sum << endl;
	} 
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...