# 題目: 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; | |
} |