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