#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
int cs=1,t,n,m;
vector<vector<int> > b;
vector<int> A,B;
vector<int> match;
bitset<500> vis;
int aug(int u){
if(vis[u])
return 0;
vis[u]=1;
for(int i=0;i<b[u].size();i++){
int v=b[u][i];
if(match[v]==-1||aug(match[v])){
match[v]=u;
return 1;
}
}
return 0;
}
int main(){
cin>>t;
while(t--){
cin>>n;
A.assign(n,0);
b.assign(n,vector<int>());
for(int i=0;i<n;i++)
cin>>A[i];
cin>>m;
B.assign(m,0);
for(int i=0;i<m;i++)
cin>>B[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if((A[i]==0&&B[j]==0)||(A[i]&&B[j]%A[i]==0))
b[i].push_back(j);
int ans=0;
match.assign(m,-1);
for(int i=0;i<n;i++){
vis.reset();
ans+=aug(i);
}
cout<<"Case "<<cs++<<": "<<ans<<endl;
}
}
#include <vector>
#include <bitset>
using namespace std;
int cs=1,t,n,m;
vector<vector<int> > b;
vector<int> A,B;
vector<int> match;
bitset<500> vis;
int aug(int u){
if(vis[u])
return 0;
vis[u]=1;
for(int i=0;i<b[u].size();i++){
int v=b[u][i];
if(match[v]==-1||aug(match[v])){
match[v]=u;
return 1;
}
}
return 0;
}
int main(){
cin>>t;
while(t--){
cin>>n;
A.assign(n,0);
b.assign(n,vector<int>());
for(int i=0;i<n;i++)
cin>>A[i];
cin>>m;
B.assign(m,0);
for(int i=0;i<m;i++)
cin>>B[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if((A[i]==0&&B[j]==0)||(A[i]&&B[j]%A[i]==0))
b[i].push_back(j);
int ans=0;
match.assign(m,-1);
for(int i=0;i<n;i++){
vis.reset();
ans+=aug(i);
}
cout<<"Case "<<cs++<<": "<<ans<<endl;
}
}
Comments
Post a Comment