题意:
输入N个工会的罢工周期,给定周期T,求该周期内有几天罢工;注意,周五周六休息不算罢工,一天同时多个罢工只计一个。
解题:
原来用简单数组就可以统计出来,并不是求公约数or公倍数之类的。。。
抄抄更健康。。。
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
// #define LOCAL_TEST
int calc_lost(vector<int> vHartal, int nDays)
{
vector<int> days;
days.resize(nDays);
for ( int i=0; i<nDays; i++ )
days[i] = 0;
for ( int i=0; i<nDays; i++ )
if ( i%7 != 5 && i%7 != 6 )
{
for ( int k=0; k<vHartal.size(); k++ )
if ( (i+1)%vHartal[k] == 0 )
{
days[i] = 1;
break;
}
} // end if
// count '1' in vector vHartal
int nRes = 0;
for ( int i=0; i<nDays; i++ )
if ( days[i] == 1 )
nRes++;
return nRes;
}
int main()
{
#ifdef LOCAL_TEST
freopen("f:\\in.txt", "r", stdin);
freopen("f:\\out.txt", "w+", stdout);
#endif
int nCases;
int nDays;
vector <int> vHartal;
int nParty;
cin >>nCases;
while ( nCases-- )
{
cin >>nDays;
cin >>nParty;
vHartal.resize(nParty);
for ( int i=0; i<nParty; i++ )
cin >>vHartal[i];
cout <<calc_lost(vHartal, nDays) <<'\n';
} // end while
return 0;
}