• CF894C Solution


    题目链接

    题解

    易得(a)中的元素均在(s)中存在,但倘若原样照搬会产生其他的(gcd)值,因此需要删去或增添些元素。因为删除元素影响的(gcd)值也许不止当前观测的一个,题解作者并未想到删除元素的算法,便尝试增添元素。推导可知,设(a)序列最小值为(mina),若存在(a_i)满足(a_i\% mina ot=0)则一定无法构造。证明如下:(∵gcd(mina,a_i)<minaquad ∴a)数组中不存在(gcd(mina,a_i)),矛盾。若将(a_i)删除则一定存在(a_j=xa_i,a_k=ya_i)(x,y)互质,因此(x,y)中必有一个无法被(frac{a_i}{gcd(a_i,mina)})整除,这意味着(a_j,a_k)中一定存在一个无法被(mina)整除,也就是(gcd(mina,a_j或a_k)<mina)。现在我们知道了(a)中所有元素均被(mina)整除,因为题目所取为子串(gcd)(而非子序列),只要用(mina)将所有元素间隔开((a_1,mina,a_2,mina,...,mina,a_n))就可以控制(gcd)(s)中元素了。

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    int s[N];
    int main()
    {
    	int m,mins=0x3f3f3f3f;
    	scanf("%d",&m);
    	for(int i=1;i<=m;i++) {scanf("%d",&s[i]); mins=min(mins,s[i]);}
    	for(int i=1;i<=m;i++)
    		if(s[i]%mins) {printf("-1"); return 0;}
    	printf("%d
    ",2*m);
    	for(int i=1;i<=m;i++) printf("%d %d ",mins,s[i]);
    	return 0;
    }
    
  • 相关阅读:
    深入学习Motan系列(二)——服务发布
    深入学习Motan系列(一)——入门及知识zookeeper储备
    Guava Cache 总结
    Jetty学习(一)
    群发百万邮件
    Project ACRN documentation
    Storage Performance Development Kit
    DPDK Test Plans
    golang 判断前缀后缀、包含关系
    golang multiconfig 示例
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14567978.html
Copyright © 2020-2023  润新知