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

Codeforces Round 1039 (Div. 2)(A-E1)

题目链接:Dashboard - Codeforces Round 1039 (Div. 2) - Codeforces

A. Recycling Center

思路

贪心,我们要花费金币最少即使a[i]>c的个数最少,我们可以从大的开始找,如果从小的开始的话,本来有个数x<=c,结果将其*2之后>c了,所以我们应该从大往小找

代码

void solve(){int n,c;cin>>n>>c;vi a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}sort(a.begin()+1,a.begin()+1+n,greater<int>());int t=1;int cnt=0;for(int i=1;i<=n;i++){if(a[i]*t<=c){t*=2;}else{cnt++;}}cout<<cnt<<"\n";
}

B. Deque Process

思路

构造,我们不妨构造成a_1<a_2a_3>a_4 或者 a_1>a_2a_3<a_4

代码 

void solve(){int n;cin>>n;vi p(n+1);for(int i=1;i<=n;i++){cin>>p[i];}int l=1,r=n;int f=0;vector<char> ans;while(l<=r){if(l==r){ans.push_back('L');break;}if(f){if(p[l]>=p[r]){ans.push_back('L');ans.push_back('R');}else{ans.push_back('R');ans.push_back('L');}}else{if(p[l]>=p[r]){ans.push_back('R');ans.push_back('L');}else{ans.push_back('L');ans.push_back('R');}}f=(f+1)%2;l++;r--;}for(auto x:ans){cout<<x;}cout<<"\n";
}

C. Leftmost Below

思路

自己手搓几个样例就能很容易发现,就拿样例3来说,40 60 90

刚开始是0 0 0 贪心地将其变成 40 30 0 -> 40 60 0 -> 40 60 40 到现在我们下一步要将a_3加50,但是50>=40所以我们一定会加到第一个40上面去

最后我们发现,只要b[i]-前面的最小值>=前面的最小值,这样是可以的,否则不行

代码

void solve(){int n;cin>>n;vi b(n+1);vi mn(n+1,inf);for(int i=1;i<=n;i++){cin>>b[i];mn[i]=min(mn[i-1],b[i]);}for(int i=1;i<=n;i++){if(b[i]-mn[i-1]<mn[i-1]){continue;}else{cout<<"NO\n";return;}}cout<<"YES\n";
}

D. Sum of LDS

思路

如果排列是递减的,那么它的子数组的最长递减子序列的长度和为\frac{n*(n-1)*(n-2)}{6}

那么现在考虑当前的排列如果出现p[i]<p[i+1]那么他对其的贡献便是-(i+1)*(n-1-i)

最后统计一下答案即可

代码

void solve(){int n;cin >> n;vector<int> p(n);for (int i = 0; i < n; ++i) {cin >> p[i];}int A = n * (n + 1) * (n + 2) / 6;int B = 0;for (int i = 0; i < n - 1; ++i) {if (p[i] < p[i + 1]) {B += (i + 1) * (n - 1 - i);}}cout << A - B << '\n';
}

E1. Submedians (Easy Version)

思路

判断一个数x是否为数组a的中值,可以将用big数组表示 if a[i]>=x big[i]=1 else big[i]=-1

同理small数组表示 if a[i]<=x small[i]=1 else small[i]=-1

x是此数组的中值要满足\sum big[i]>=0\sum small[i]>=0

对于此题来说我们要找到中值的最大值,我们可以将small数组给忽略掉,这样我们就能够进行二分查找,对于x来说如果此区间内\sum big[i]>=0那么一定存在比x大的中值

  • 用前缀和优化
  • i从k开始保证最小长度为k
  • 用mn维护前缀最小,贪心

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n,k;cin>>n>>k;vi a(n+1);for(int i=1;i<=n;i++){cin>>a[i];}int ans=-1,ansl=-1,ansr=-1;auto check=[&](int x)->bool{vector<int> pre(n+1);for(int i=1;i<=n;i++){pre[i]=pre[i-1]+(a[i]>=x?1:-1);}int mn=inf,l=-1;for(int i=k;i<=n;i++){if(mn>pre[i-k]){mn=pre[i-k];l=i-k+1;}if(pre[i]-mn>=0){ans=x;ansl=l;ansr=i;return true;}}return false;};int l=1,r=n;while(l<=r){int mid=l+r>>1;if(check(mid)){l=mid+1;}else{r=mid-1;}}cout<<ans<<" "<<ansl<<" "<<ansr<<"\n";
}
signed main() {vcoistntcout<<fixed<<setprecision(2);int _=1;cin>>_;while(_--) solve();return 0;
}

http://www.dtcms.com/a/302965.html

相关文章:

  • 【前端】React 与 Vue:前端两大框架的全方位对比解析
  • CMakelists.txt 实现多级目录编译
  • redis未授权getshell四种方式
  • 【ELasticsearch】搭建有负载均衡 ELB 的 ES 集群
  • TongESBv7报错:DatabaseConnectionException: no connection available(by lqw)
  • 正则表达式 速查速记
  • 多数据库学习之VastbaseG100海量数据库入门实践
  • Spring AI 1.0 提供简单的 AI 系统和服务
  • opencv 模块裁剪 按需安装指定模块
  • 《零基础入门AI: 从轮廓查找到形态学变换(OpenCV图像预处理)》
  • 【数据架构09】人工智能及数据智能架构篇
  • Charles中文版深度解析,轻松调试API与优化网络请求
  • 产品需求如何系统化管理
  • 简明量子态密度矩阵理论知识点总结
  • Spring Boot 2整合Druid的两种方式
  • shell学习从入门到精通(第二部分)
  • 第六届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2025)
  • 暑期自学嵌入式——Day10(C语言阶段)
  • springboot校园外卖配送系统
  • Stm32中USB 对时钟的要求
  • 使用 Scrapy 框架定制爬虫中间件接入淘宝 API 采集商品数据
  • 案例开发 - 日程管理 - 第三期
  • HOT100——链表篇Leetcode206. 反转链表
  • IP核乘法器NCO的使用
  • 多目标优化分解方法:加权和与罚函数边界交叉
  • 数据分析入门,深入浅出的数据分析
  • 基于 JWT 的登录验证功能实现详解
  • (多线程)等待一个线程-join() 获取当前线程的引用 线程的六种状态 线程休眠 线程的调度执行中的细节
  • 【边缘填充】——图像预处理(OpenCV)
  • 边缘计算+前端实时性:本地化数据处理在设备监控中的响应优化实践