Pinely Round 4 (Div. 1 + Div. 2)A——C题解

Pinely Round 4 (Div. 1 + Div. 2)

A. Maximize the Last Element

题意:一个数列,可以删除相邻两个数,问最后剩下的最大值是多少。
题解:求距离两端距离均为偶数的位置的最大值即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int num[N] = {};
        int maxn = 0;
        for(int i=1;i<=n;i++)
        {
            cin>>num[i];
            if((i-1)%2 == 0 && (n-i)% 2 == 0)maxn = max(maxn,num[i]);
        }

        cout<<maxn<<endl;
    }
    return 0;
}

B. AND Reconstruction

题意:给定数组{ b i b_{i} bi},( i ≤ n − 1 i\le n-1 in1),求数组{ a i a_{i} ai},其中 a i a_{i} ai& a i + 1 a_{i+1} ai+1= b i b_{i} bi
题解:在二进制下 b i b_{i} bi的某一个位置为1的时候,对应的 a i a_{i} ai a i + 1 a_{i+1} ai+1号位置上二级进制对应也必须为1即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 200100;
#define ll unsigned long long
ll b[N];
ll a[N];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int maxn = 0;
        for(int i=1;i<n;i++)
        {
            cin>>b[i];
        }
        memset(a,0,sizeof(a));
        for(int i=1;i<=n-1;i++)
        {
            a[i] = a[i] | b[i];
            a[i+1] = a[i+1]|b[i];
        }
        bool flag = true;
        for(int i=1;i<n;i++)
        {
            ll temp = a[i] & a[i+1];
            if(temp != b[i])
            {
                flag = false;
                break;
            }
        }
        if(flag)
        {
            for(int i=1;i<=n;i++)
            {
                cout<<a[i]<<" ";
            }
            cout<<endl;
        }
        else cout<<-1<<endl;
    }
    return 0;
}

C. Absolute Zero

题意:给一组数,每个数等于这个数减去一个数差的绝对值,问多少次后可以把整个数组变为零,同时输出每次减去的数字;如果不能全部变为零则输出-1。
题解:找到差最大的两个数,则减去这两个数的和的二分之一;同时特判其他情况即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
#define ll long long
ll b[N];
ll a[N];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int maxn = 0;
        for(int i=1;i<=n;i++)
        {
            cin>>b[i];
        }
        bool flag = true;
        for(int i=1;i<n;i++)
        {
            int k = b[i+1] - b[i];
            if(k&1)
            {
                flag = false;
                break;
            }
        }
        if(!flag)
        {
            cout<<-1<<endl;
        }
        else
        {
            vector<int>aa;
            while(true)
            {
                int curren = 0,posion = 0;
                bool flag1 = true;
                for(int i=1;i<n;i++)
                {
                    int g = abs(b[i+1]-b[i]);
                    if(curren<=g)
                    {
                        posion = i;
                        curren = g;
                    }
                    if(b[i]!=0 || b[i+1]!=0)
                    {
                        flag1 = false;
                    }
                }
                if(curren == 0 || flag1 )break;
                int tt = (b[posion]+b[posion+1])/2;
                aa.push_back(tt);
                for(int i=1;i<=n;i++)
                {
                    b[i] = abs(b[i] - tt);
                }

            }
            if(b[1])
            {
                aa.push_back(b[1]);
            }
            cout<<aa.size()<<endl;
            for(auto x : aa)
            {
                cout<<x<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,Codeforces Round 511 (Div. 1)是一个比赛的名称。然而,引用内容中没有提供与这个比赛相关的具体信息或问题。因此,我无法回答关于Codeforces Round 511 (Div. 1)的问题。如果您有关于这个比赛的具体问题,请提供更多的信息,我将尽力回答。 #### 引用[.reference_title] - *1* [Codeforces Round 860 (Div. 2)题解](https://blog.csdn.net/qq_60653991/article/details/129802687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Codeforces Round 867 (Div. 3)(A题到E题)](https://blog.csdn.net/wdgkd/article/details/130370975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Codeforces Round 872 (Div. 2)(前三道](https://blog.csdn.net/qq_68286180/article/details/130570952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yi壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值