uva 10050 Hartals

算法描述:开辟一个日期数组,清空为0,以1来标记当天已经有活动,不用再添加,每次从0变为1就计数一次。另外做一个预处理,将所有的周五和周六标记为1,但不能计数,没得到一个h,就调用函数在日期数组中搜索判断。判断所有h的倍数,如果为0,则计数并变为1

 

#include <stdio.h>
#include <string.h>
#define MAX 3660
bool date[MAX];
int count,N;

void manage()
{
    int i;
    memset( date , 0 , sizeof(date) );
    for(i=7; i<=N+1; i+=7)  date[i]=date[i-1]=1;  //一定要N+1,不懂的话,想想N=12和N=13
}
void find(int h)
{ int i; for(i=h; i<=N; i+=h) if(!date[i]) { count++; date[i]=1;}  }
int main()
{
    int T,P,h,i;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&N); manage(); 
        scanf("%d",&P);
        for(count=0,i=1; i<=P; i++)
        {  scanf("%d",&h);  find(h); }
        printf("%d\n",count);
    }
    return 0;
}
posted @ 2012-10-05 22:33  Titanium  阅读(171)  评论(0编辑  收藏  举报