每個政黨都有自己的罷會週期
如第一筆測資,議期 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; }
沒有留言:
張貼留言