CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)
ACM思维题训练集合
To confuse the opponents, the Galactic Empire represents fractions in an unusual format. The fractions are represented as two sets of integers. The product of numbers from the first set gives the fraction numerator, the product of numbers from the second set gives the fraction denominator. However, it turned out that the programs that work with fractions in this representations aren’t complete, they lack supporting the operation of reducing fractions. Implement this operation and the Empire won’t forget you.
Input
The first input line contains two space-separated integers n, m (1 ≤ n, m ≤ 105) that show how many numbers the first set (the numerator) and the second set (the denominator) contain, correspondingly.
The second line contains n space-separated integers: a1, a2, …, an (1 ≤ ai ≤ 107) — the numbers that are multiplied to produce the numerator.
The third line contains m space-separated integers: b1, b2, …, bm (1 ≤ bi ≤ 107) — the numbers that are multiplied to produce the denominator.
Output
Print the answer to the problem in the form, similar to the form of the input data. The number of values in the sets you print nout, mout must satisfy the inequality 1 ≤ nout, mout ≤ 105, and the actual values in the sets aout, i and bout, i must satisfy the inequality 1 ≤ aout, i, bout, i ≤ 107.
Separate the values in the lines by spaces. The printed fraction must be reduced, that is, there mustn’t be such integer x (x > 1), that the numerator and the denominator of the printed fraction are divisible by x. If there are several matching answers, print any of them.
Examples
Input
3 2
100 5 2
50 10
Output
2 3
2 1
1 1 1
Input
4 3
2 5 10 20
100 1 3
Output
1 1
20
3
Note
In the first test sample the numerator equals 1000, the denominator equals 500. If we reduce fraction 1000/500 by the greatest common divisor of the numerator and the denominator (by 500), we obtain fraction 2/1.
In the second test sample the numerator equals 2000, the denominator equals 300. If we reduce fraction 2000/300 by the greatest common divisor of the numerator and the denominator (by 100), we obtain fraction 20/3.

日常WA一天
不看跑的数据,我都不知道自己怎么错的,老天爷。我的输出超出了限制100001不能超过100000,我觉得那时候,那些没有过的,一定是这个原因,出题人真是丧心病狂。
第一个代码是错的,第二个是修改了的,换了方式。
#include <bits/stdc++.h>
using namespace std;
template <typename t>
void read(t &x)
{
char ch = getchar();
x = 0;
int f = 1;
while (ch < '0' || ch > '9')
f = (ch == '-' ? -1 : f), ch = getchar();
while (ch >= '0' && ch <= '9')
x = x * 10 + ch - '0', ch = getchar();
x *f;
}
bitset<100000010> v;
int prime[6000001];
int m = 0;
void primes(int n)
{
for (int i = 2; i * i <= n; i++)
{
if (!v[i])
{
for (int j = i * i; j <= n; j += i)
v[j] = 1;
}
}
for (int i = 2; i <= n; i++)
if (!v[i])
prime[m++] = i;
}
vector<int> a[4];
unordered_map<int, int> c, d;
int main()
{
int n, m, maxi = 0;
read(n), read(m);
primes(10000005);
for (int i = 0; i < n; i++)
{
int tem;
read(tem);
maxi = max(maxi, tem);
c[tem]++;
}
for (int i = 0; i < m; i++)
{
int tem;
read(tem);
maxi = max(maxi, tem);
d[tem]++;
}
//cout << 1 << endl;
for (int i = 0; prime[i] <= maxi; i++)
{
// cout<<i<<endl;
int cnt = 0, ans = 0, cnt2 = 0;
int flag = 1;
for (auto po = c.begin(); po != c.end();)
{
// cout<<1<<endl;
pair<int, int> tem = *po;
cnt = 0;
if (tem.first < prime[i])
{
po++;
continue;
}
else
{
flag = 0;
while (tem.first % prime[i] == 0)
{
tem.first /= prime[i];
cnt++;
//cout<<i<<endl;
}
cnt *= tem.second;
auto pi = po;
po++;
c.erase(pi);
if (tem.first != 1)
c[tem.first] += tem.second;
}
ans += cnt;
}
cnt2 = ans;
ans = 0;
for (auto po = d.begin(); po != d.end();)
{
pair<int, int> tem = *po;
cnt = 0;
if (tem.first < prime[i])
{
po++;
continue;
}
else
{
flag = 0;
while (tem.first % prime[i] == 0)
{
tem.first /= prime[i];
cnt++;
//cout<<i<<endl;
}
cnt *= tem.second;
auto pi = po;
po++;
d.erase(pi);
if (tem.first != 1)
d[tem.first] += tem.second;
}
ans += cnt;
}
cnt = cnt2 - ans;
if (cnt == 0)
continue;
else if (cnt < 0)
{
cnt = -cnt;
int temp = 1;
int j = 0;
for (; j < cnt; j++)
{
temp *= prime[i];
if (temp * prime[i] > 10000000)
{
a[3].push_back(temp);
// cout << 1 << endl;
temp = 1;
}
}
a[3].push_back(temp);
}
else
{
int temp = 1;
int j = 0;
for (; j < cnt; j++)
{
temp *= prime[i];
if (temp * prime[i] > 10000000)
{
a[2].push_back(temp);
// cout << 1 << endl;
temp = 1;
}
}
a[2].push_back(temp);
}
if (flag)
break;
}
if (a[2].size() == 0)
a[2].push_back(1);
if (a[3].size() == 0)
a[3].push_back(1);
cout << a[2].size() << " " << a[3].size() << endl;
for (int i = 0; i < a[2].size(); ++i)
printf("%d ", a[2][i]);
puts("");
for (int i = 0; i < a[3].size(); ++i)
printf("%d ", a[3][i]);
puts("");
}
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n, m, tot, a[100005], b[100005], z[10000005], pos[10000005], q[1000005], t1[1000005], t2[1000005];
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = 1; i <= m; ++i)
scanf("%d", &b[i]);
for (int i = 2; i <= 10000000; ++i)
if (!z[i])
{
for (int j = i; j <= 10000000; j += i)
z[j] = i;
q[++tot] = i;
pos[i] = tot;
}
for (int i = 1; i <= n; ++i)
{
int k = a[i];
while (k != 1)
{
t1[pos[z[k]]]++;
k /= z[k];
}
}
for (int i = 1; i <= m; ++i)
{
int k = b[i];
while (k != 1)
{
t2[pos[z[k]]]++;
k /= z[k];
}
}
for (int i = 1; i <= tot; ++i)
{
t1[i] = min(t1[i], t2[i]);
t2[i] = t1[i];
}
printf("%d %d\n", n, m);
for (int i = 1; i <= n; ++i)
{
int k = a[i], p = a[i];
while (k != 1)
{
if (t1[pos[z[k]]])
{
p /= z[k];
t1[pos[z[k]]]--;
}
k /= z[k];
}
printf("%d ", p);
}
printf("\n");
for (int i = 1; i <= m; ++i)
{
int k = b[i], p = b[i];
while (k != 1)
{
if (t2[pos[z[k]]])
{
p /= z[k];
t2[pos[z[k]]]--;
}
k /= z[k];
}
printf("%d ", p);
}
printf("\n");
return 0;
}
CF思维联系–CodeForces - 222 C Reducing Fractions(数学+有技巧的枚举)的更多相关文章
- CF思维联系--CodeForces - 218C E - Ice Skating (并查集)
题目地址:24道CF的DIv2 CD题有兴趣可以做一下. ACM思维题训练集合 Bajtek is learning to skate on ice. He's a beginner, so his ...
- CF思维联系– CodeForces - 991C Candies(二分)
ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...
- CF思维联系–CodeForces - 225C. Barcode(二路动态规划)
ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...
- CF思维联系–CodeForces -224C - Bracket Sequence
ACM思维题训练集合 A bracket sequence is a string, containing only characters "(", ")", ...
- CF思维联系–CodeForces - 223 C Partial Sums(组合数学的先线性递推)
ACM思维题训练集合 You've got an array a, consisting of n integers. The array elements are indexed from 1 to ...
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...
- CF思维联系– CodeForces -CodeForces - 992C Nastya and a Wardrobe(欧拉降幂+快速幂)
Nastya received a gift on New Year - a magic wardrobe. It is magic because in the end of each month ...
- P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码
题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...
- CodeForce 222C Reducing Fractions
To confuse the opponents, the Galactic Empire represents fractions in an unusual format. The fractio ...
随机推荐
- 薅羊毛? 月入10万? | 这是自动化测试老司机的特长--Python自动化带你薅视频红包,一个都不放过!
一.目标场景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. 与传统的红包不一样,视频红包包含位置的不确定性.大小不确定性.元素 ID 的不确定性 ...
- ThinkPHP5中raw的作用
在tp5中,我们一般在模板中输出变量是这样的:{$test} 但是有时候在有些源码中我们可以看到这样的方式:{$test|raw} 这个时候如果你去找手册会发现,全文基本没有提到这个raw的作用. 那 ...
- 37.3 net--TcpDemo1 大小写转换
需求:使用TCP协议发送数据,并将接收到的数据转换成大写返回 启动方式:先打开服务端,再打开客户端 客户端 package day35_net_网络编程.tcp传输; import java.io.I ...
- 28.6 Integer 自动装箱和拆箱
public class IntegerDemo2 { public static void main(String[] args) { //自动装箱 // Integer i = new Integ ...
- 配置spark历史服务(spark二)
1. 编辑spark-defaults.conf位置文件 添加spark.eventLog.enabled和spark.eventLog.dir的配置修改spark.eventLog.dir为我们之前 ...
- Linux中vim编辑器 的 快捷键 --- 常用 的 都比较全
Linux中vim编辑器的功能非常强大,许多常用快捷键用起来非常方便,这里将我学vim入门时学的一些常用的快捷键分享给大家一下,希望可以帮助你们. 这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到 ...
- 【半监督学习】MixMatch、UDA、ReMixMatch、FixMatch
半监督学习(Semi-Supervised Learning,SSL)的 SOTA 一次次被 Google 刷新,从 MixMatch 开始,到同期的 UDA.ReMixMatch,再到 2020 年 ...
- 食物链 POJ - 1182 (并查集的两种写法)
这是一个非常经典的带权并查集,有两种写法. 1 边权并查集 规定一下,当x和y这条边的权值为0时,表示x和y是同类,当为1时,表示x吃y,当为2时,表示x被y吃. 一共有三种状态,如图,当A吃B,B吃 ...
- Connections in Galaxy War ZOJ - 3261 (并查集)
点权并查集的反向离线操作 题目大意:有n个stars,每一个都一定的“颜值”.然后stars与stars之间可以相连,query c表示再与c相连的stars中,颜值比c高的,stars的标号,如果有 ...
- E. Max Gcd
单点时限: 2.0 sec 内存限制: 512 MB 一个数组a,现在你需要删除某一项使得它们的gcd最大,求出这个最大值. 输入格式 第一行输入一个正整数n,表示数组的大小,接下来一行n个数,第i个 ...