ZUFE 2485 - Heap (打表)

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


输出

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

样例输入

1
5
1 2 3 4 5
3
1 1 1 1
1 1 2 2
1 2 3 4

样例输出

5
2
0

提示

来源

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值