首页 > 其他分享 >Codeforces Ronud 892(Div.2)

Codeforces Ronud 892(Div.2)

时间:2023-08-14 22:33:25浏览次数:40  
标签:892 int ll Codeforces 最小值 a2 数组 Div.2 x1

Codeforces Ronud 892(Div.2)

关于A题我有话说

传送门

题意

给定一个长度为n的数组a,问能否将元素全部放入两个空数组b和c中,使得b和c数组同时满足非空,且c数组中没有任何数是b数组中的数的除数,如果可以输出一种存储方案,不可以就输出-1

思路

当天晚上一开始没有做出来,我一开始的思路是我只要找到一个数除自身外不是任何数的除数,把这个数放到c数组就可以了,感觉这就是正解,但没有通过,应该还是有地方少思考了.
说一下正解思路:
我们可以将数组a进行排序,将最大值放到c数组中,其余的全部放到b数组中,注意,如有多个最大值,全部放在c数组中,最后判断一下b和c的长度即可.

代码

#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n;
    cin>>n;
    std::vector<int > a,b,c;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        a.push_back(x);
    }
    sort(a.begin(),a.end());
    for(int i=0;i<a.size();i++){
        if(a[i]==a[n-1]){
            c.push_back(a[i]);
        }
        else{
            b.push_back(a[i]);
        }
    }
    if(b.size()==0||c.size()==0){
        cout<<-1<<endl;

    }
    else{
        cout<<b.size()<<" "<<c.size()<<endl;
        for(int i=0;i<b.size();i++){
            cout<<b[i]<<" ";
        }
        cout<<endl;
        for(int i=0;i<c.size();i++){
            cout<<c[i]<<" ";
        }
        cout<<endl;
        

    }
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

关于b题我有话说
传送门

题意

给定n个长度为m的数组,定义美观度为每个数组的最小值之和,对于每个数组,可以将这个数组中最多一个数转移到其他数组当中,输出可能的最大美观度.

思路

因为我们要输出尽可能最大的美观度,所以我们要做的就是将最小值给拿出去,拿到另一个数组,但是这有可能会改变其他数组的最小值,因此我们可以将每个数组中的最小值和次最小值分别存储出来,这样我们把次最小值和最小值排一个序,,除次最小值数组第一个值不要外,拿出最小值数组中第一个元素,将这些数加到一起就是最大美观度

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;

void solve(){
    int n;

    vector<int> a1;
    vector<int> a2;
    ll ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        ll x1 = INF, x2 = INF;
        ll x;
        cin >> x;
        for (ll j = 1, y; j <= x; j++)
        {
            cin >> y;
            if (y < x1)
            {
                x2 = x1;
                x1 = y;
            }
            else if (y >= x1 && y < x2)
            {
                x2 = y;
            }
        }
        a1.push_back(x1), a2.push_back(x2);
    }
    sort(a1.begin(), a1.end());
    sort(a2.begin(), a2.end());

    for (int i = 1; i < n; i++)
    {
        ans += (ll)a2[i];
    }
    ans += (ll)a1[0];
    cout << ans << '\n';
}
int main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;

}

标签:892,int,ll,Codeforces,最小值,a2,数组,Div.2,x1
From: https://www.cnblogs.com/du463/p/17629966.html

相关文章

  • CodeForces-1798#B 题解
    正文开个数组\(last_k\)统计\(a_{i,j}\)最后买彩票的时间,再开一排桶\(day_t\)记录该天最后买彩票的有哪些人(即:有\(p\)满足\(last_p=t\)的集合)。将\(last_k\)放入\(day_t\)中,判断\(day_t\)中是否存在空桶,若有则无解(因为没有人在当天是最后买彩票的)。因为本题是......
  • 2023.08.12 codeforces round 892 div2
    年轻人的第三场div2(已完成:ABCDE)rank:1265solved:4ratingchange:+276newrating:1323A.UnitedWeStand题意:给定一个数列a,问是否能分成两个非空的数列b和c,使得c中任意一个数不是b中任意一个数的因子;若x是y的因子则有x<=y;因此不妨将数列的最大值放入c,把剩下的数放入b;注意数列中......
  • Codeforces Round 892 (Div. 2)
    Preface最接近橙名的一场,可惜给我一个小时也没想到E的关键点,后面徐神一点拨就懂了虽然现在这个号已经到渡劫局了但因为之前有场比赛给了ztc一份代码然后他直接没咋改交上去了,估计下次rollRating的时候这个号要掉200来分了嘛不过也无所谓反正下次打另一个号冲分,而且像我这种永......
  • 【题解】Educational Codeforces Round 146(CF1814)
    而且怎么感觉E,F比D要简单很多,大概是因为比较套路吧[惊恐]A.Coins题目描述:本题一共有\(t\)组数据。每组数据包含两个整数\(n\)和\(k\),如果存在两个非负整数\(x,y\),满足\(2\timesx+k\timesy=n\),输出YES,否则输出NO(yes,Yes,NO,nO均可)。题目分析:注意到\(y\)可......
  • Codeforces Round 892 (Div. 2)(vp)
    CodeforcesRound892(Div.2)AUnitedWeStand题意:给一个数组,让你把它分成两个数组,第二个数组里的数不能是第一个数组里的数的除数,先输出两个数组的长度,依次输出两个数组的数,如果无法分出来,输出-1思路:如果数的种类只有一种一定不行,反之一定行,对于可行的情况,我们把最大的......
  • Codeforces Round 892 (Div. 2)
    手速慢了,掉分C.AnotherPermutationProblemProblem-C-Codeforces题意给定一个正整数\(n\),设序列\(p\)为\(n\)的排列,求\(\sum_{i=1}^{n}p_i\timesi-max_{j=1}^np_j\timesj\)的最大值。思路打表可知,答案的排列一定为翻转一部分后缀。暴力枚举要翻转的后缀即可。代码......
  • Codeforces Round 892 div2.C
    这C真的魔幻,官方题解完全和写的不一样,太玄学了,打表发现的规律这是打表代码:intmain(){cin>>n;vector<int>a(n+1);for(inti=1;i<=n;i++)a[i]=i;LLans=0;do{autob=a;LLsum=0,mx=0;......
  • Codeforces Round 892 (Div.2)
    A.UnitedWeStand题解赛时想复杂了题目要求我们保证数组\(c\)中的数不是数组\(b\)中任意一个数的因子我们考虑将最小值置于数组\(b\)即可constintN=2e5+10,M=4e5+10;intn;inta[N];voidsolve(){cin>>n;intmi=INF;for(inti......
  • Codeforces Round 874 G题解
    做不动那么多题了,来个GG就是问你一棵树能切成多少个大小为3的链,想了半天,想过dp啥的,但是后来发现这个贪心就好了,可以证明贪心找不到的,其他方法也找不到好久没复健了,这是第一次,感觉以后要多做题才可以#include<bits/stdc++.h>usingnamespacestd;constexprintlimit=(4e......
  • Codeforces Round 799 (Div. 4)(vp)
    CodeforcesRound799(Div.4)AMarathonvoidsolve(){vector<int>a(4);intgoal;cin>>goal;intans=0;for(inti=0;i<3;i++){intx;cin>>x;if(goal<x)ans++;}co......