# 題目: UVa 10050 - Hartals
# 題目說明
題目給總天數及各個party的間隔天數
天數從禮拜天開始算,禮拜天為day 1
周五及周六不算
求hartal的天數
例如:
天數N = 9,party1 = 3、party2 = 4
| 星期 | 日 | 一 | 二 | 三 | 四 | 五 | 六 | 日 | 一 |
|---|---|---|---|---|---|---|---|---|---|
| 天數 | day1 | day2 | day3 | day4 | day5 | day6 | day7 | day8 | |
| party1 | o | o | o | ||||||
| party2 | o | o | |||||||
| hartal | 1 | 2 | 3 | 4 |
hartal = 4
INPUT:
第一行為一個整數T,代表有幾筆資料
每筆資料第一行有兩個整數N與P
N代表天數P代表有P個party
接下來有P行,每行讀入一個整數代表這個party的間隔天數
OUTPUT:
輸出hartal的天數
# 解題方法
先將罷工的天數設為true
再把周五及周六設為false
最後算true的次數
# 參考程式碼
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T, N, P, num;
vector<bool> days;
cin >> T;
while (T--)
{
cin >> N >> P;
days.assign(N + 1, false);
while (P--)
{
cin >> num;
for (int i = num; i <= N; i += num) days[i] = true;
}
for (int i = 6; i <= N; i += 7) days[i] = days[i + 1] = false;
int cnt = 0;
for (int i = 1; i <= N; ++i) if (days[i]) ++cnt;
cout << cnt << "\n";
}
return 0;
}