cf.训练

1. Buying Lemonade

Buying Lemonade
解题思路:
排序:将插槽的罐数 a 从小到大排序(sort(a, a+n))。
特殊情况处理:
若最小罐数足够大(a[0] >= k/n 且 k%n0)或 k1,直接输出 k(认为每个按钮按 1 次即可,逻辑不严谨)。
贪心遍历:
遍历排序后的插槽,对第 i 个插槽(当前剩余 n-i 个插槽未处理),计算需要按动的次数 len:
len = k/(n-i)(向上取整),表示为了拿到 k 罐,在剩余 n-i 个插槽中,每个至少需要按 len 次。
若 len <= a[i](当前插槽的罐数足够支持 len 次按动),则直接按 k 次即可拿到足够罐,输出 ans + k。
否则,按动 a[i]+1 次(拿完当前插槽所有罐,再额外按 1 次确保覆盖该插槽),并更新剩余需要的罐数 k -= a[i]。

#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;
void solve()
{ll n,k;cin>>n>>k;ll a[n];for(ll i=0;i<n;i++)cin>>a[i];sort(a,a+n);if(a[0]>=k/n&&k%n==0||k==1){cout<<k<<endl;return ;}ll x=0;ll ans=0;for(ll i=0;i<n;i++){ll len=k/(n-i);if(k%(n-i)!=0)len++;if(len<=a[i]){ans+=k;break;}ans=ans+a[i]+1;k-=a[i];}cout<<ans<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)solve();return 0;
}

2. Profitable Interest Rate

Profitable Interest Rate
解题思路:
就是一个数学的推导
如果a>b
直接输出
否则
设最优的为x,a-x>=b-2x;
以此推出:
x>=b-a;
最终代码:

#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;
void solve()
{ll a,b;cin>>a>>b;if(a>=b){cout<<a<<endl;return ;}ll x=b-a;if(x>=a){cout<<0<<endl;return ;}cout<<2*a-b<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)solve();return 0;
}

3. Stalin Sort

Stalin Sort
解题思路:
当且仅当第一个元素最大时,数组是脆弱的。为了证明正向,我们可以在整个范围内执行一次操作,这显然会使数组非递增。现在,我们来证明反向。考虑最大值不是第一个元素的任何数组。注意,对任何子数组进行斯大林排序都不会删除第一个元素,也不会删除最大值。因此,如果第一个元素不是最大值,就会破坏非递增特性,以此只需要找到第一个元素最大的最长子序列
代码:

#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 s[N];
void solve()
{ll n;cin>>n;for(ll i=1;i<=n;i++){cin>>s[i];}ll ans=n;ll sum=0;for(ll i=1;i<=n;i++){ll cut=0;for(ll j=i;j<=n;j++){if(s[j]<=s[i])cut++;}sum=max(sum,cut);}cout<<ans-sum<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)solve();return 0;
}

4. LuoTianyi and the Table

LuoTianyi and the Table
这一题就比较烦了,最开始一直算不出样例,后摸索出来,但是最后求结果时方法不对,结果一直过不了,迫不得已去看题解了。
题解的解题思路非常清晰:
就是构造了两方案,一个是以最大以及次大为主的覆盖,一个覆盖多一个覆盖少,而另一个则是最小以及次小
详细代码:

#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
void solve()
{ll n, m;  cin >> n >> m;  ll sum = 0;  ll a[n * m + 1]; for (ll i = 1; i <= n * m; i++) {cin >> a[i]; }sort(a + 1, a + n * m + 1);  ll ans = 0; // 如果行数 n 大于列数 m ,交换 n 和 m ,统一按行数小于等于列数的情况处理if (n > m)  swap(n, m);// 计算第一种可能的结果 ans1// 思路:构建一种表格填充方式,使得最大值和最小值的贡献按特定方式计算// (n*m - 1) * a[n*m] :假设最大值 a[n*m] 被 (n*m - 1) 个子表的 max 用到// a[1] * (n * (m - 1)) :假设最小值 a[1] 被 n*(m - 1) 个子表的 min 用到 // a[2] * (n - 1) :假设次小值 a[2] 被 (n - 1) 个子表的 min 用到 ll ans1 = (n * m - 1) * a[n * m] - a[1] * (n * (m - 1)) - a[2] * (n - 1);// 计算第二种可能的结果 ans2// 思路:构建另一种表格填充方式,使得最大值和次大值、最小值的贡献按特定方式计算// (n * (m - 1)) * a[n * m] :假设最大值 a[n*m] 被 n*(m - 1) 个子表的 max 用到//  a[n * m - 1] * (n - 1) :假设次大值 a[n*m - 1] 被 (n - 1) 个子表的 max 用到 //  a[1] * (n * m - 1) :假设最小值 a[1] 被 (n*m - 1) 个子表的 min 用到 ll ans2 = (n * (m - 1)) * a[n * m] + a[n * m - 1] * (n - 1) - a[1] * (n * m - 1);cout << max(ans1, ans2) << endl;
}
signed main()
{IOS; ll t = 1;  cin >> t;  while (t--) {  solve(); }return 0; 
}

5.Array merging

Array merging
这一题就属于思路对,但是不会实现
解题思路:
就是找到这两个数组中相同元素的最大连续子段的和就行

#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 a[N];
ll b[N];
void solve()
{ll n;cin>>n;for(ll i=1;i<=n;i++)cin>>a[i];for(ll i=1;i<=n;i++)cin>>b[i];vector<ll> f1(n+n+1,0);vector<ll> f2(n+n+1,0);ll p=1,p1=1;for(ll i=2;i<=n;i++){if(a[i]!=a[i-1]){f1[a[i-1]]=max(f1[a[i-1]],i-p);p=i;}if(b[i]!=b[i-1]){f2[b[i-1]]=max(f2[b[i-1]],i-p1);p1=i;}}f1[a[n]]=max(f1[a[n]],n-p+1);f2[b[n]]=max(f2[b[n]],n-p1+1);ll ans=0;for(ll i=1;i<=n+n;i++){ans=max(ans,f1[i]+f2[i]);}cout<<ans<<endl;
}
signed main()
{IOS;ll t=1;cin>>t;while(t--)solve();return 0;
}

总结

还是感觉非常有压力的,而且学到了一种新的思路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2719.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA无人共享球杆柜系统球杆柜租赁系统源码支持微信小程序

JAVA无人共享球杆柜系统&#xff1a;物联网小程序打造高尔夫租赁新体验市场机遇与行业痛点1. 高尔夫球杆租赁市场蓝海市场规模快速增长&#xff1a;2023年中国高尔夫球杆行业市场规模达到14.77亿元&#xff0c;预计2024年将突破15.75亿元。全球高尔夫装备市场2024年达到132.6亿…

uniapp Android App集成支付宝的扫码组件mPaaS

第一步&#xff0c;设置包名&#xff0c;下载插件导项目中 在manifest.json中添加package, 设置完指定的包名后&#xff1a;Hbuilderx打包时包名也会变化 变成 下载插件导项目中&#xff0c; 第二步&#xff1a;进入阿里云mPaas后台完成代码配置&#xff0c;下载配置文件http…

Effective C++ 条款22: 将成员变量声明为private

Effective C 条款22&#xff1a;将成员变量声明为private核心思想&#xff1a;始终将成员变量声明为private&#xff0c;通过函数接口控制访问&#xff0c;提供封装弹性、精确访问控制和一致性维护点。 ⚠️ 1. 公开成员的致命缺陷 数据一致性破坏&#xff1a; class AccessPoi…

Java基础-斗地主游戏

目录 案例要求&#xff1a;​ 实现思路&#xff1a; 代码&#xff1a; Main启动类&#xff1a; Card实体类&#xff1a; Room操作类&#xff1a; 总结&#xff1a; 案例要求&#xff1a; 实现思路&#xff1a; 1构造卡牌,细节&#xff1a;实体类另设一个int类型变量表示…

基于Java的AI/机器学习库(Smile、Weka、DeepLearning4J)的实用

基于Java和AI技术处理动漫视频 以下是一些基于Java和AI技术处理动漫视频(如《亚久斗》)的实用案例和实现方法,涵盖视频分析、风格转换、角色识别等方向。每个案例均提供技术思路和关键代码片段。 视频关键帧提取 使用OpenCV提取动漫视频中的关键帧,保存为图片供后续分析…

Qt 自动无法加载数据库为空

解决方式:main() 中设置QDir::setCurrent(QCoreApplication::applicationDirPath());即可 1、开机自启 void setAutoStart(bool enable) {QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);QS…

vue3指定设置了dom元素的ref但是为null问题

目录 问题场景 ​编辑问题原因 解决方案 问题场景 可以看到我指定了元素的ref&#xff0c;正常来说在组件挂载完毕后可以通过ref.value正常获取到dom元素 但是实际打印出来为null 问题原因 根本原因就是v-if指令的问题&#xff0c;v-if指令能够控制元素是否渲染&#xff0…

控制建模matlab练习08:根轨迹

此练习主要是&#xff1a;在matlab中绘制根轨迹的方法。 一、在matlab中建立对应系统 1、例如&#xff0c;对于如图的反馈系统。 2、其中开环传递函数G(s)、闭环传递函数Gcl(s)。3、因此&#xff0c;其闭环传递函数的根轨迹&#xff0c;就可以直接在matlab中绘制出来。 4、直接…

深度学习中的三种Embedding技术详解

提纲背景介绍特征类型与Embedding方法1. ID类特征的Embedding处理1.1 标准Embedding方法1.2 IdHashEmbedding方法2. 数值型特征的Embedding处理2.1 RawEmbedding方法三种Embedding方法对比总结实践建议总结背景介绍 在深度学习领域&#xff0c;Embedding&#xff08;嵌入&…

前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)

八、DOM 编程1&#xff0e;DOM&#xff08;Document Object Model&#xff09;,文档对象模型&#xff1a;将 HTM L文档进行模型化处理&#xff0c;形成一颗结构化的文档树&#xff0c;从而提供访问&#xff0c;修改文档的统一编程接口&#xff08;API&#xff09;&#xff0c;一…

Spring Boot 的事务注解 @Transactional 失效的几种情况

开发中我们经常会用到 Spring Boot 的事务注解&#xff0c;为含有多种操作的方法添加事务&#xff0c;做到如果某一个环节出错&#xff0c;全部回滚的效果。但是在开发中可能会因为不了解事务机制&#xff0c;而导致我们的方法使用了 Transactional 注解但是没有生效的情况&…

RabbitMQ面试精讲 Day 8:死信队列与延迟队列实现

【RabbitMQ面试精讲 Day 8】死信队列与延迟队列实现 文章标签 RabbitMQ,消息队列,死信队列,延迟队列,面试技巧,分布式系统 文章简述 本文是"RabbitMQ面试精讲"系列第8天&#xff0c;深入讲解死信队列与延迟队列的实现原理与实战应用。文章详细解析死信队列的触发…