【题解】csp.ac #63. 除尽(T1-19)

题目

csp.ac #63. 除尽(T1-19)

思路

\(\large 2 = 2\)
\(\large 3 = 3\)
\(\large 4 = 2 \times2\)
\(\large 5 = 5\)
\(\large 6 = 2 \times 3\)

对于任意一个 \(a,b\),都可以转换成质数\(2,3,5\)的几次方的乘积。
\(\large a = 2^{a_1}3^{a_2}5^{a_3}\)

\(\large b = 2^{b_1}3^{b_2}5^{b_3}\)

只要\(b_1 \leq a_1\)\(b_2 \leq a_2\)并且\(b_3 \leq a_3\),那么 \(a\) 就是 \(b\) 的倍数。

Code

#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>

inline void read(int &T) {
	int x=0;bool f=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	T=f?-x:x;
}

int n,m,a[6],b[6];

int main() {
	read(n),read(m);
	for(int i=1,x;i<=n;++i) {
		read(x);
		if(x==1) continue;
		if(x==2) {++a[2];continue;}
		if(x==3) {++a[3];continue;}
		if(x==4) {a[2]+=2;continue;}
		if(x==5) {++a[5];continue;}
		if(x==6) {++a[2],++a[3];continue;}
	}
	for(int i=1,x;i<=m;++i) {
		read(x);
		if(x==1) continue;
		if(x==2) {++b[2];continue;}
		if(x==3) {++b[3];continue;}
		if(x==4) {b[2]+=2;continue;}
		if(x==5) {++b[5];continue;}
		if(x==6) {++b[2],++b[3];continue;}
	}
	for(int i=2;i<=5;++i) {
		if(b[i]==0) continue;
		if(a[i]<b[i]) {
			puts("No");
			return 0;
		}
	}
	puts("Yes");
	return 0;
}
posted @ 2020-05-01 06:49  yu__xuan  阅读(149)  评论(0编辑  收藏  举报