首页 > 其他分享 >2024.11.15 Codeforces Round 987(Div. 2)

2024.11.15 Codeforces Round 987(Div. 2)

时间:2024-11-15 23:29:51浏览次数:1  
标签:2024.11 15 int 987 long cin -- vector solve

Solved:5/6
Rank:74

比赛链接

A. Penchick and Modern Monument

给定一个不增序列,修改最少的数字使其不降。

全都修改为出现次数最多的数即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve(){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int& x:a)cin>>x;
    int ans=1,len=1;
    for(int i=1;i<n;++i){
        if(a[i]==a[i-1])++len;
        else len=1;
        ans=max(ans,len);
    }
    cout<<n-ans<<'\n';
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int T;
    cin>>T;
    while(T--)solve();
}

B. Penchick and Satay Sticks

给定一个排列,只能交换位置和值都相邻的数,问能否排成有序

注意到这种规则下每个数最多移动一个位置,因此如果存在 \(|a_i-i|>1\) 就直接无解。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

bool solve(){
    int n;
    cin>>n;
    vector<int> a(n);
    for(int& x:a)cin>>x,--x;
    for(int i=0;i<n;++i)if(abs(a[i]-i)>1)return 0;
    return 1;
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int T;
    cin>>T;
    while(T--)cout<<(solve()?"YES":"NO")<<'\n';
}

C. Penchick and BBQ Buns

给定 \(n\),构造一个正整数序列,使得出现过的数字都至少出现两次,且任意两个相同数字的距离均为平方数。

\(n\) 为偶数时,\(\{1,1,2,2,\dots,\frac n2,\frac n2\}\) 即满足条件。

\(n\) 为奇数时,必然存在一个数出现至少三次。即 \(p_2-p_1,p_3-p_2,p_3-p_1\) 同时为完全平方数。满足这个条件最小的一组数是 \(9,16,25\)。因此 \(n\leq 25\) 无解。

另一方面,\(n=27\) 时容易构造出 \(\{1,2,2,3,3,4,4,5,5,1,6,6,7,7,8,8,9,9,10,10,11,11,12,13,13,1,12\}\) 满足条件。

因此 \(n\geq 27\) 均有解,后面和偶数一样填数就行。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve(){
    int n;
    cin>>n;
    if(!(n&1)){
        for(int i=1;i<=n/2;++i)cout<<i<<' '<<i<<' ';
        cout<<'\n';
    }
    else{
        if(n<27)cout<<"-1\n";
        else{
            cout<<"1 2 2 3 3 4 4 5 5 1 6 6 7 7 8 8 9 9 10 10 11 11 12 13 13 1 12 ";
            for(int i=14;i*2+1<=n;++i)cout<<i<<' '<<i<<' ';
            cout<<'\n';
        }
    }
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int T;
    cin>>T;
    while(T--)solve();
}

D. Penchick and Desert Rabbit

有 \(n\) 棵树,从第 \(i\) 棵树出发,每次可以跳到右边更矮的树或者左边更高的树。对所有起点,求能跳到的最高的树。

每个点的答案一定是一个前缀 max,且跳的过程会被挡住当且仅当存在某个 \(i\) 使得 \(\max_{j=1}^i a_i \leq \min_{j=i+1}^n a_n\)。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve(){
    int n;
    cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;++i)cin>>a[i];
    vector<int> mx(n+2),mn(n+2);
    mx[0]=0,mn[n+1]=1e9;
    for(int i=1;i<=n;++i)mx[i]=max(mx[i-1],a[i]);
    for(int i=n;i>=1;--i)mn[i]=min(mn[i+1],a[i]);
    for(int i=1,j=1;i<=n;++i){
        if(mx[i]<=mn[i+1]){
            while(j<=i)cout<<mx[i]<<' ',++j;
        }
    }
    cout<<'\n';
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int T;
    cin>>T;
    while(T--)solve();
}

E. Penchick and Chloe's Trees

给一棵树,已知这棵树由一棵完全二叉树缩点生成,求这棵完全二叉树的最小深度。

树形 dp,设 \(f_u\) 表示 \(u\) 的子树缩点前的最小深度。

假设已知 \(u\) 的全体儿子的深度。考虑贪心,每次找到深度最小的两棵子树(设为 \(d\))合并成 \(d+1\) 的子树。

这就是二进制加法的过程。即 \(f_u = \lceil\log_2(\sum_v d_{v_i})\rceil\)。

暴力模拟二进制加法即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=1e6+5;
int n,x,f[N];
vector<int> e[N];
int t[N];
void dfs(int u){
    int mx=0,cnt=0;
    for(int v:e[u])dfs(v);
    vector<int> buc;
    for(int v:e[u]){
        int x=f[v];
        if(!t[x])++cnt;
        ++t[x];
        buc.push_back(x);
        while(t[x]==2){
            t[x]=0,--cnt;
            if(!t[x+1])++cnt;
            ++t[++x],buc.push_back(x);
        }
        mx=max(mx,x);
    }
    for(int x:buc)t[x]=0;
    f[u]=mx+(cnt>1)+(e[u].size()==1);
}

void solve(){
    cin>>n;
    for(int i=1;i<=n;++i)e[i].clear(),f[i]=0;
    for(int i=2;i<=n;++i)cin>>x,e[x].push_back(i);
    dfs(1);
    cout<<f[1]<<'\n';
}

int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    int T;
    cin>>T;
    while(T--)solve();
}

标签:2024.11,15,int,987,long,cin,--,vector,solve
From: https://www.cnblogs.com/EssentialSingularity/p/18548889

相关文章

  • [鲜花] 20241115 My(self+life).
    它是我的生命。我透过明亮的镜子看过去,是我与我的生命的像,还有它的影子,还有那些...意料之外,情理之中。或许我早就感知到它的存在,生活中总是能感觉到它的温度:触碰到了它的体感肌肤,传递冷暖于我。我想找到它,或者说:我想找到属于我自己的东西。可在我轻微的挪动之后,它彻底不见了。从......
  • Alpha冲刺(3/14)——2024.11.14
    目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表一、团队成员分工与进度成员完成的任务完成的任务时长剩余时间施......
  • 项目冲刺11.15
    这个作业属于哪个课程计科22级34班这个作业要求在哪里作业要求这个作业的目标进行为期七天的项目冲刺并记录前言本篇博客是项目冲刺的第七篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客......
  • 20241115
    Talesofseafaring发现需要维护最短路为单数和双数的最短路,所以先跑个最短路,然后对于每个询问看d是单数还是双数,然后判断输出就行,注意到直接这么写然后对于每个询问再查的话空间会爆,所以就把询问记录下来对于每个点为起始跑最短路的时候直接更新答案就行。公路修建问题求最大......
  • Android Framework AMS(15)ContentProvider分析-2(getContentResolver及ContentResolver
    该系列文章总纲链接:专题总纲目录AndroidFramework总纲本章关键点总结&说明:说明:本章节主要解读ContentProvider组件的基本知识。关注思维导图中左上侧部分即可。有了前面activity组件分析、service组件分析、广播组件分析、ContentProvider组件的基本流程分析、基于此......
  • P9870 [NOIP2023] 双序列拓展 题解
    P9870[NOIP2023]双序列拓展题解NOIP2023T3,特殊性质题。什么是特殊性质题?就是题目给出了你极其神秘的性质,从而引导你想出正解。本篇题解将从部分分的角度,一步步讲述部分分与正解的关系。这样看的话,本题会变得十分简单。\(\text{Task}1∼7,O(Tnm)\)简化题意其实就是要求......
  • 大数据学习15之Scala集合与泛型
    1.概述        大部分编程语言都提供了数据结构对应的编程库,并称之为集合库(CollectionLibrary),Scala也不例外,且它还拥有以下优点:易用:灵活组合运用集合库提供的方法,可以解决大部分集合问题简洁:拜类型推断和函数式编程所赐,帮助程序员写出更简洁,更优雅的代码安全:......
  • SS241115C. 排序(sort)
    SS241115C.排序(sort)题意给你一个长度为\(n\)的序列\(a\),每次操作对\([1,\frac{n}{2}],[\frac{n}{2}+1,n]\)进行归并排序。有\(q\)次询问,给出\(t,x\),问进行\(t\)次操作后\(a_x\)的值。思路考虑一次操作发生了什么。假设\(x<y\),那么\(x\)和它后面的一坨都会排......
  • Android15音频进阶之input调节CarAudioService音量过程(九十四)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • 比赛讲解:图论算法(11.11~11.15)
    图论算法T1-U502532找水杯一道水题,基本上和P4779一样(我连样例都搬过来了,能不一样吗?)所以呢,你们可以直接用\(Dijikstra\)1.最初起点到达所有点的距离都是未知的,记作无穷大。2.在对起点的邻接点进行扫描后发现,起点可以通过某些边抵达一些节点,那么就更新d数组(d[i]用于记录起点s......