2014年5月17日 星期六

[UVa] 10050 - Hartals

10050 - Hartals

每個政黨都有自己的罷會週期

如第一筆測資,議期 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;
}

沒有留言:

張貼留言