2025牛客寒假算法基础集训营6 ptlks的题解

A.复制鸡

题意:

反推原数列,求最短

思路

相同相邻的数可以合并。

代码

点击查看代码
int a[N];
void solve() {
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int s=0;
	a[0]=-1;
	for(int i=1;i<=n;i++){
		if(a[i]!=a[i-1]){
			s++;
		}
	}
	cout<<s<<endl;
}

B.好伙计猜拳

题意:

求使序列合法的最少代价。

思路

直接dp即可,用map存状态。

代码

点击查看代码
void solve() {
	int n,c1,c2;
	cin>>n>>c1>>c2;
	map<PII,int>m,m1;
	m[{0,0}]=0;
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		for(auto [u,s]:m){
			auto[a,b]=u;
			if(a<=x&&b<=y){
				if(m1.count({x,y})==0)m1[{x,y}]=s;
				else m1[{x,y}]=min(s,m1[{x,y}]);
			}
			if(a<=y&&b<=x){
				if(m1.count({y,x})==0)m1[{y,x}]=s+c2;
				else m1[{y,x}]=min(s+c2,m1[{y,x}]);
			}
			if(m1.count({a,b})==0)m1[{a,b}]=s+c1;
			else m1[{a,b}]=min(s+c1,m1[{a,b}]);
			
		}
		m=m1;
		m1.clear();
	}
	int mn=INT64_MAX;
	for(auto[u,s]:m){
		mn=min(mn,s);
	}
	cout<<mn<<endl;
}

C.数列之和

题意:

求题目所给第k大

思路

不难发现序列中均为偶数,且大于2的2的整数幂均为出现。

代码

点击查看代码
void solve() {
    int k;
    cin>>k;
    int s=k*2;
    int p=4;
    while(p<=s){
        s+=2;
        p*=2;
    }
    cout<<s<<endl;
}

H.小鸡的排列构造

题意:

题目给了限制,要求构造排列。

思路

由于题目保证一组测试数据中输入的所有l,r的奇偶性相同,分奇数偶数构造,只要保证所有合法区间都满足题目限制即可。

代码

点击查看代码
void solve() {
    int n,m;
    cin>>n>>m;
    int s=0;
    for(int i=1;i<=m;i++){
        int l,r,c;
        cin>>l>>r>>c;
        s=(r-l)%2;
    }
    if(s){
        for(int i=n;i>0;i--){
            cout<<i<<' ';
        }cout<<endl;
    }else{
        int p=n;
        cout<<p<<' ';
        for(int i=p-2;i>=1;){
            cout<<i<<' '<<i+1<<' ';
            i-=2;
            if(i==0){
                cout<<1;
            }
        }
        cout<<endl;
    }
     
}

I.小鸡的排列构造的checker

题意:

询问区间内小于等于c的个数。

思路

主席树板子。

代码

点击查看代码

J.铁刀磨成针

题意:

求题目所给最大值。

思路

磨刀优先级最高,然后枚举开始攻击的时刻。

代码

点击查看代码
void solve() {
    int n,x,y;
    cin>>n>>x>>y;
    int mx=0;
    for(int i=1;i<=y&&i<=n;i++){
        int s=0;
        int xx=x+i;
        if(y<=n){
            s+=xx*(y-i+1);
            if(y+xx<=n){
                s+=(xx)*(xx-1)/2;
            }else{
                s+=(xx-(n-y)+xx-1)*(n-y)/2;
            }
        }else{
            s+=xx*(n-i+1);
        }
         
        mx=max(mx,s);
    }
    cout<<mx<<endl;
}

K.鸡翻题

题意:

签到。

思路

见代码。

代码

点击查看代码
void solve() {
	int x,y;
	cin>>x>>y;
	if((y-(x+x+1))%4==0){
		cout<<"YES\n";
	}else{
		cout<<"NO\n";
	}
}

K.鸡翻题

题意:

签到。

思路

见代码。

代码

点击查看代码
void solve() {
	int x,y;
	cin>>x>>y;
	if((y-(x+x+1))%4==0){
		cout<<"YES\n";
	}else{
		cout<<"NO\n";
	}
}

L.变鸡器

题意:

签到。

思路

直接判断即可。

代码

点击查看代码
posted @   ptlks  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示