首页 > 编程语言 >2025牛客寒假算法基础集训营1

2025牛客寒假算法基础集训营1

时间:2025-01-23 22:31:15浏览次数:1  
标签:val 2025 int ll ++ else 牛客 maxn 集训营

A

乍一看,找一个数不是数组内所有数的倍数,或者因数

但是换个角度想,如果这个数的因数,都没有这些数,且这个数比数组内的所有数都大

那么很容易想到,1e9+7,直接输出即可

B

一棵树上,不重不漏地经过每一个点,那么这样一棵树必然是一条链

所以只用考虑每个节点的“度”

D

判断数组内是否只出现两个数且数量相等,按照题意模拟即可

#include<bits/stdc++.h>

using namespace std;

int t;
int n;
map<int,int>mp;
void solve(){
    cin>>n;
    int cnt=0;mp.clear();
    for(int i=1;i<=n;++i){
        int x;
        cin>>x;
        if(mp[x]==0) ++cnt,mp[x]++;
        else mp[x]++;
    }
    if(cnt!=2){
        puts("No");
    }
    else {
        int last=0;
        for(auto [x,y]:mp){
            if(last==0) last=y;
            else{
                if(last!=y) puts("No");
                else puts("Yes");
            }
        }
    }
    return ;
}
int main(){
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

G

可以对数组内的数,选一个+1,选一个-1,其实就是转移值罢了

所以如果数组内的数的和不等于一个排列的总和,那就不能形成一个排列

贪心地想,每个数变成离他最近的(1-n)之间的数
先排序,那么答案
\(ans=sum_{i=1}^{n}|a_i-i|\)

ans/=2,因为是转移值

#include<bits/stdc++.h>

using namespace std;
#define ll long long 
int n;
int top=0;
const int maxn=1e5+10;
ll sum=0;
int a[maxn];
int f[maxn];
bool book[maxn];
int main(){
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>a[i];
        sum+=a[i];
        if(a[i]<=n && a[i]>=1 && !book[a[i]])book[a[i]]=1;
        else f[++top]=a[i];
    }
    if(sum!=(ll)n*(1+n)/2){
        puts("-1");
    }
    else{
        ll ans=0;
        int j=1; sort(f+1,f+1+top);
        for(int i=1;i<=top;++i){
            while(book[j]==1 && j<=n) ++j;
            ans+=abs(j-f[i]);
        }
        cout<<ans/2<<endl;
    }
    return 0;
}

M

贪心地想,我们将最小值翻倍,然后算极差,但是可能最小值翻倍后比最大值还大,那么我们就需要考虑翻倍次小值

以此类推,从最小值开始,然后将扩张的区间扩张到次小值,最后到最大值

这样的扩张每个元素只会计算一次,时间复杂度O(n)

扩张的时候用set维护,当前数组的翻倍的区间,和未翻倍的区间,在每次扩张到一个最小值时,计算极差

#include <bits/stdc++.h>
using namespace std;
const int maxn= 1e5 + 5;

typedef long long ll;
struct node{
    ll val,p;
}f[maxn];
bool cmp(node x,node y){ 
    return x.val<y.val;
}
void solve()
{
    int n;
    cin>>n;
    set<ll>st1,st2;
    vector<ll>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>f[i].val;
        f[i].p=i;
        a[i]=f[i].val;
        st2.insert(f[i].val);
    }
    sort(f+1,f+1+n,cmp);
    if(n==1){
        cout<<0<<endl;
        return ;
    }
    ll maxx=max(f[n].val,f[1].val*2),minn=1e15;
    ll ans=maxx-min(f[1].val*2,f[2].val);
    st1.insert(f[1].val*2);
    st2.erase(f[1].val);
    int l=f[1].p,r=f[1].p;
    for(int i=2;i<=n;i++){
        while(f[i].p>r){
            r++;
            st1.insert(a[r]*2);
            st2.erase(a[r]);
        }
        while(f[i].p<l){
            l--;
            st1.insert(a[l]*2);
            st2.erase(a[l]);
        }
        if(st1.size()&&st2.size()){
            maxx=max(*st1.rbegin(),*st2.rbegin());
            minn=min(*st1.begin(),*st2.begin());
            ans=min(ans,maxx-minn);
        }
        else ans=min(ans,*st1.rbegin()-*st1.begin());
    }
    cout<<ans;
}
int main()
{
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    while (t--)
        solve();
    return 0;
}

标签:val,2025,int,ll,++,else,牛客,maxn,集训营
From: https://www.cnblogs.com/guiyou/p/18688718

相关文章

  • 2025年1月23日全球AI科技新闻速递:从“星门计划”到字节跳动的120亿美元投资
    2025年刚刚开始,全球AI领域已经掀起了新一轮热潮。从美国总统特朗普发布的5000亿美元“星门计划”到字节跳动的120亿美元AI投资计划,再到中国AI企业的技术突破,AI正在以前所未有的速度推动世界科技的发展。本篇文章将带您聚焦这些重大事件,深入解读它们对全球AI格局的深远影响......
  • 组合数学学习笔记(五)(2025.1.23)
    斯特林数斯特林数作为组合数学中非常重要的一类数,一共分为第一类斯特林数与第二类斯特林数,在处理复杂的小球与盒子的关系时有重要的作用。我们先从比较简单的第二类斯特林数讲起。第二类斯特林数定义递推公式与通项公式生成函数应用高阶差分普通幂转下降幂第一类斯特林数......
  • 国内可用谷歌镜像列表(2025年1月23日更新-长期维护)
    北京时间2025年1月23日更新。众所周知的原因,有时候更新的网址能用,有时候不能用,建议把能用的网址保存下来。不管是电脑还是手机,推荐使用谷歌浏览器或火狐浏览器。国产浏览器可能会屏蔽。注意:本文内容仅供学术研究使用。⚠️长期更新,建议收藏!谷歌学术谷歌学术1谷歌学术2......
  • 2025年全球医疗器械展会推荐清单
    区域 展会名称 展会时间 北美 美国国际家用保健及康复展览会Medtrade 2025.2.19-20   美国西部兽医年会暨展览会WVCAnnualConference 2025.3.2-5   美国骨科医师协会年会AAOSAnnualMeeting 2025.3.10-14   美国迈阿密医疗用品及设备展览会FIME 2025.6.11......
  • 2025.1.23冠词
    错误分析:对于冠词知识点掌握不透彻需掌握知识点:‌冠词‌是英语语法中的重要概念,主要分为不定冠词(a/an)和定冠词(the),此外还有零冠词。冠词本身不能单独使用,也没有词义,主要用于帮助指明名词的含义。‌不定冠词(a/an)‌用法‌:不定冠词用于单数可数名词前,表示“一个”的意思,但不强调......
  • 2025多校冲刺省选模拟赛7
    2025多校冲刺省选模拟赛7\(T1\)A.三色卡(card)\(0pts\)如果存在一个小矩形和大矩形的大小相同,此时另外两个矩形可以任意放,贡献是容易计算的。否则至少需要一个小矩形覆盖大矩形的两个角,通过交换长、宽钦定完全覆盖行的矩形比完全覆盖列的矩形的数量多。完全覆盖行......
  • 2025牛客寒假算法基础集训营2 ptlks的题解
    A.一起奏响历史之音!题意:判断给定的音节序列是否仅由五声音调组成。思路签到题。代码点击查看代码voidsolve(){ intn,f=1; for(inti=1;i<=7;i++){ cin>>a[i]; if(a[i]==1||a[i]==2||a[i]==3||a[i]==5||a[i]==6){ }else{......
  • 2025dsfz集训Day11:数位DP、状态压缩DP、单调队列优化DP
    Day11:数位DP、状压DP、单调队列优化DP经典题目:AccodersP2195|【一本通提高数位动态规划】AmountofDegrees题意:求出区间\([x,y]\)中满足下面条件的所有的数:这个数\(x\)可以用\(k\)个不相等的\(b\)的整数幂之和。首先这个区间是满足区间减法的。因此我们可以只考虑,\(......
  • 2025dsfz集训Day11: 单调队列优化DP
    单调队列优化DP单调队列队列是单调的,递增或递减只能在队首或者队尾进行操作队列中维护所有在窗口中的元素,有一些元素是没用的,以区间最大值为例:所以从左到右尝试加入队列,弹出队尾比当前数更小的元素,弹出队首已经出窗口的元素,再队尾压入当前数这样,队首就是窗口最大值每......
  • 游记 NOIWC2025
    喜报2025年1月17日至24日,NOI2025冬令营在绍兴龙山书院举办。在本次冬令营中,广东省共105位选手(含2位候选队)参加,产生了1位国家队(刘海峰)、28位铜牌获得者、19位银牌获得者、8位金牌获得者。本次比赛中获奖率达到\(100\text{%}\)的学校有:佛山市南海区石实实......