每個政黨都有自己的罷會週期
如第一筆測資,議期 14 天, 3 個政黨
第一個政黨每 3 天不開會,第二個政黨每 4 天不開會,第三個政黨每 8 天不開會
但星期五、星期六一定開會
所以如表格:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
| Sun. | Mon. | Tue. | Wed. | Thu. | Fri. | Sat. | Sun. | Mon. | Tue. | Wed. | Thu. | Fri. | Sat. | |
| Party1 | * | * | * | * | ||||||||||
| Party2 | * | * | * | |||||||||||
| Party3 | * | |||||||||||||
| Hartals | 1 | 2 | 3 | 4 | 5 |
罷會總天數為 5 天
#include < iostream >
using namespace std;
void hartal( int* &, int , int );
int main()
{
int n;
// 有 n 筆測資
cin >> n;
for( ; n > 0; n-- )
{
// 議期天數( day ), 政黨數目( party )
int day, party;
cin >> day >> party;
// 把議期製作成表格,並假設每天都要開會( 1 )
int *h = new int[day];
for( int i = 0; i < day; i++ )
*(h+i) = 1;
// temp 為各個政黨的罷會週期
int temp, count = 0;
for( int i = 0; i < party; i++ )
{
cin >> temp;
hartal( h , day, temp );
}
for( int i = 0; i < day; i++ )
// 星期五跟星期六不罷會
if( *(h+i) == 0 && !( i % 7 == 5 || i % 7 == 6 ))
count ++;
// 輸出罷會總天數
cout << count << endl;
delete [] h;
}
return 0;
}
void hartal( int* &a, int day, int temp )
{
for( int i = temp-1; i < day; i += temp )
// 罷會就把 ( 1 ) 改為 ( 0 )
*(a+i) = 0;
}
沒有留言:
張貼留言