CF #563 Div. 2(ALL)

https://codeforces.com/contest/1174

A:

题意:重新排列2n个数,使得前面n个的sum不等于后面n个的sum。

思路:sort使得达到最坏情况

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MX = 1e6+5;
int a[5000];
int main(){
    int n;scanf("%d",&n);for(int i=1;i<=n*2;i++)scanf("%d",&a[i]);
    sort(a+1,a+1+n*2);int sa=0,sb=0;
    for(int i=1;i<=n;i++) sa+=a[i],sb+=a[i+n];
    if(sa==sb){puts("-1");return 0;}
    for(int i=1;i<=2*n;i++)printf("%d ",a[i]);
    return 0;
}

B:

题意:给一个数列,每次可以交换和为奇数的两位数,求可以得到的最小字典序的序列。

思路:如果奇偶数都有,那么sort即可,否则不变。

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MX = 1e6+5;
int a[MX];
int main(){
    int tagodd=0,tageven=0;
    int n;scanf("%d",&n);for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);if(a[i]%2==0)tageven=1;
        if(a[i]%2==1)tagodd=1;
    }
    if(tagodd+tageven==1){
        for(int i=1;i<=n;i++)printf("%d ",a[i]);
        return 0;
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++)printf("%d ",a[i]);
    return 0;
}

C:

题意:构造n个数的数列,使得任何两个数要么相同,要么gcd==1,且这个数列的最大值最小。

思路:有因子2的相同,有因子3的相同。

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MX = 1e6+5;
int vis[MX],ans[MX];
map<int,int>mp;
int main(){
    int n;cin>>n;
    for(int i=2;i<=n;i++){
        if(vis[i])continue;
        for(int j=i+i;j<=n;j=j+i){
            if(mp[j]==0)
                mp[j]=i;
            vis[j]=1;
        }
    }
    int mx=1;ans[2]=1;printf("%d ",1);
    for(int i=3;i<=n;i++){
        if(vis[i]==0){mx++;printf("%d ",mx);ans[i]=mx;}
        else {printf("%d ",ans[mp[i]]),ans[i]=ans[mp[i]];}
    }
    return 0;
}

D:https://blog.csdn.net/qq_41730604/article/details/90771268

E:https://blog.csdn.net/qq_41730604/article/details/95100387

F:https://blog.csdn.net/qq_41730604/article/details/95002334

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值