今天來解YKL20(UVA10050):Hartals
T => 測試案例數量
N => 天數
P => 黨的數量
接下來的代表那黨要罷工所隔的天數
friday和Saturday是休息日,所以不需要納入考量
最後計算出被罷工影響的天數
1
14
3
3=>每隔 3 天罷工一次
4=>每隔 4 天罷工一次
8=>每隔 8 天罷工一次
1 2 3 4 5 6 7
Su Mo Tu We Th Fr Sa
1 2 x x 3 4 x # 政黨 1(每 3 天罷工)
x x 3 x x 5 6 # 政黨 2(每 4 天罷工)
x x x x x x x # 政黨 3(每 8 天罷工)
1: Su
2: Mo
3: Tu x <- 政黨 1
4: We x <- 政黨 2
5: Th x <- 沒有政黨罷工
6: Fr x <- 星期五,無法罷工
7: Sa x <- 星期六,無法罷工
8: Su x <- 政黨 3
9: Mo x <- 政黨 1
10: Tu x <- 政黨 2
11: We x <- 沒有政黨罷工
12: Th x <- 政黨 1
13: Fr x <- 星期五,無法罷工
14: Sa x <- 星期六,無法罷工
1.先計算第一個黨的罷工日期,並存進vector
2.再計算第二個黨的罷工日期,並存進vector
...
最後計算除了星期五和六之外的罷工數量
#include <iostream>
#include <vector>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int N, P;
cin >> N;
cin >> P;
vector<bool> days(N + 1, false);
vector<int> party(P);
for (int i = 0; i < P; i++) {
cin >> party[i];
int tmp = party[i];
for (int k = tmp; k <= N; k += tmp) {
if (k % 7 != 0 && k % 7 != 6) {
days[k] = true;
}
}
}
int count = 0;
for (int day = 1; day <= N; day++) {
if (days[day]) {
count++;
}
}
cout << count << endl;
}
return 0;
}