当前位置: 首页 > news >正文

Codeforces Round 1040 (Div. 2)(补题)

文章目录

  • 前言
  • A.Submission is All You Need
  • B. Pathless
  • C.Double Perspective
  • D.Stay or Mirror

前言

又被卡在第二题了,当时脑子跟犯糊涂似的,B题越理越乱,导致比赛结束,还在想着题,彻夜难眠!


A.Submission is All You Need

Submission is All You Need
题目大意:
在这里插入图片描述
操作:
在这里插入图片描述
思路:只需要统计0的个数就行了,有多少个0就加上多少个1
由于mex的特性,以及操作时的特点,只要把0变成1就行,
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s[N];
ll sum[N];
void slove()
{ll n;cin>>n;ll f=0;for(ll i=1;i<=n;i++){cin>>s[i];sum[i]=s[i]+sum[i-1];if(s[i]==0)f++;}cout<<sum[n]+f<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

B. Pathless

Pathless
在这里插入图片描述
思路;
对于这一题是有规律的
如果a1,a2,…,an的和sum
1.如果sum>s;
则一定不会满足条件,这时只需要按原数组输出就行
2.sum==s
这种是一定会满足的直接输出-1;
3.s>sum
如果s-sum=1,可以通过先0后2再1的顺序输出
这样可以使得往返之后的额外增加的数,不管如何都不会凑成1
如果大于1,这一种不管如何排列,总会找到相邻的数进行往返,以此来凑齐多出的数
因为相邻数对的和可以通过线性组合覆盖所有大于1的数
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define fi first
#define se second 
#define pii pair<ll,ll>
const ll N=1e6+10;
ll s1[N];
void slove()
{ll n,s;cin>>n>>s;ll sum=0;ll a1=0,b1=0,c1=0;for(ll i=1;i<=n;i++){cin>>s1[i];if(s1[i]==0)a1++;else if(s1[i]==1)b1++;elsec1++;sum+=s1[i];}if(sum>s){for(ll i=1;i<=n;i++)cout<<s1[i]<<" ";cout<<endl;}else{if(sum==s){cout<<-1<<endl;}else{s=s-sum;if(s==1){for(ll i=1;i<=a1;i++)cout<<0<<" ";for(ll i=1;i<=c1;i++)cout<<2<<" ";for(ll i=1;i<=b1;i++)cout<<1<<" ";cout<<endl;return ;}cout<<-1<<endl;}}
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

C.Double Perspective

Double Perspective
在这里插入图片描述
其中主要的意思就是
f(s)代表的是在数轴上两点之间距离之和
就比如(1,2)(2, 3)(3,4)其f(s)就是3;
而g(s)
则代表的是成环的长度,此时ai与bi是一条无向边
就比如(1,2)(2,4)(1,4)此时成环,即g(s)=3;
了解完这些之后就是然后找到f(s)-g(s)的最大值
其实很简单,只需要把成环的边去掉,则剩下的集合就是最大的
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e6+10;
ll k;
ll s[N];
ll h[N];
void in()//初始化
{for(ll i=1;i<=2*k;i++){s[i]=i;h[i]=0;}
}
ll find(ll x)//查找根节点
{ll r=x;while(r!=s[r])r=s[r];ll i=x,j;while(i!=j){j=s[i];s[i]=r;i=j;}return r;
}
void mset(ll l,ll r)//合并
{l=find(l);r=find(r);if(l==r)return ;if(h[l]<h[r]){s[l]=r;}else{if(h[l]==h[r])h[r]++;s[r]=l;}return ;
}
void slove()
{cin>>k;in();vector<ll> p;for(ll i=1;i<=k;i++){ll l,r;cin>>l>>r;l=find(l);r=find(r);if(l!=r)//如果不成环,相当于把成环的跳过了{mset(l,r);p.push_back(i);}}cout<<p.size()<<endl;for(auto i:p)cout<<i<<" ";cout<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}

D.Stay or Mirror

Stay or Mirror
在这里插入图片描述
题目的意思就是寻找逆序对的,就是这个条件在这里插入图片描述
通过这个操作
在这里插入图片描述能否使逆序对最小化。
注意:
在这里插入图片描述

当然这一题利用的贪心策略:
对于每个元素 p [i],计算两种选择(保留原值或选择 2n-p [i])分别会产生的逆序数贡献,然后选择贡献较小的那个
对于数组中的每个元素 p [i],代码计算两个值:
l:在 p [i] 之前(j < i)且比 p [i] 大的元素数量
r:在 p [i] 之后(j > i)且比 p [i] 大的元素数量
为什么这样计算?
当选择保留 p [i] 时,它会与前面所有比它大的元素形成逆序对,贡献为 L
当选择 2n-p [i] 时,由于 2n-p [i] 的值较大(对于排列中的元素),它不会与前面的元素形成逆序对,而是会与后面比它小的元素形成逆序对。而后面比 p [i] 大的元素数量 R,恰好等于后面比 2n-p [i] 小的元素数量(因为 2n-p [i] 较大)
因此,对于每个元素,取 min (L, R) 作为它对总逆序数的最小贡献,累加后得到最终结果。
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define ll long long
#define endl '\n'
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e4+10;
ll s[N];
void slove()
{ll n;cin>>n;for(ll i=1;i<=n;i++){cin>>s[i];}ll ans=0;for(ll i=1;i<=n;i++){ll l=0,r=0;for(ll j=1;j<=i;j++)//保留是s[i];if(s[j]>s[i])l++;for(ll j=i+1;j<=n;j++)//选择2n-s[i];if(s[j]>s[i])r++;ans+=min(l,r);//取其贡献最小的累加到答案}cout<<ans<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)slove();return 0;
}
http://www.dtcms.com/a/310270.html

相关文章:

  • Java函数式编程之【基本数据类型流】
  • Thymeleaf 模板引擎原理
  • 删除MicroGame
  • 设计模式之职责链模式
  • Android 中 Intent 的显式和隐式使用方式
  • Alpine Linux 设置镜像的时区
  • ONLYOFFICE 深度解锁系列.14-如何在ONLYOFFICE表格中调用异步API,集成外部数据源
  • R语言基础图像及部分调用函数
  • MyEclipse启动OutOfMemoryError内存溢出
  • 笔试——Day25
  • 【数据结构入门】顺序表
  • linux81 shell通配符:[list],‘‘ ``““
  • AI数字人:会“呼吸”的虚拟人如何改变我们的世界?
  • 倒计时!2025国自然放榜时间锁定
  • DreamBoards 借助 DreamHAT+ 雷达插件为 Raspberry Pi 提供 60GHz 毫米波雷达
  • 使用Excel解析从OData API获取到的JSON数据
  • AR智能巡检系统:制造业设备管理的效率革新
  • 【难点】敬语
  • 2025年文生图模型stable diffusion v3.5 large的全维度深度解析
  • Altium 移除在原理图之外的元器件
  • Vue3 Vue3中的响应式原理
  • 从零开始:Python编程快速入门指南
  • 超算中尝试安装dify(失败)
  • Docker 实战 -- Nextcloud
  • 茶叶蛋大冒险小游戏流量主微信抖音小程序开源
  • Nginx 配置导致 “无法建立到 ws://xxx/_stcore/stream 的连接” 的解决方案
  • 使用ai的共识,技巧,避坑。
  • 低速信号设计之 FSI 篇
  • 简单打包应用
  • 栈和队列(Java实现)