ZUFE 2485

来源:互联网 发布:硬盘录像机端口 编辑:程序博客网 时间:2024/06/05 14:32

2486: Heap

时间限制: 2 Sec  内存限制: 128 MB
提交: 16  解决: 5
[提交][状态][讨论版]

题目描述

有n个非负整数,a1,a2,a3.....an。

有Q次询问,每次询问输入四个正整数A,B,C,D

每次询问输出有多少个ai,满足ai%A==0 && ai%B==0 && ai%C==0 && ai%D==0。

输入

第一行输入T,表示有T组测试数据。

每组测试数据,

第一行输入n,

第二行输入n个非负整数,

第三行输入Q,

接下来Q行每行输入四个正整数A,B,C,D。

1<=n<=100000

0<=ai<=100000

1<=Q<=100000

1<=A,B,C,D<=10000


输出

每次询问,输出满足条件的数字个数。

样例输入

151 2 3 4 531 1 1 11 1 2 21 2 3 4

样例输出

520

提示

来源

周甄陶


POINT:

为每一个出现的数的倍数打表。

a[I]代表有几个i、2i、3i。

注意0的情况。注意一点细节。


#include <stdio.h>#include <algorithm>#include <string.h>#include <iostream>#include <math.h>#include <map>using namespace std;int pat[1020];map<string,int> m;map<int,string> name;int main(){    int n;    int now;    while(~scanf("%d",&n)&&n)    {        now=0;        m.clear();        memset(pat,0,sizeof pat);        while(n--)        {            string a,b;            cin>>a>>b;            if(m[a]==0)                m[a]=++now,name[now]=a;            if(m[b]==0)                m[b]=++now,name[now]=b;            pat[m[b]]++;        }        int flag=0;        string ans;        for(int i=1;i<=now;i++)        {            if(pat[i]==0)            {                ans=name[i];                if(flag) {                    flag=0;                    break;                }                if(!flag) flag=1;            }        }        if(flag) cout<<ans<<endl;        else printf("No\n");     }    return 0;}



原创粉丝点击