Codeforces Round 980 (Div. 2)

news/2024/10/20 20:49:15

糖丸了,什么沟史比赛

A.Profitable Interest Rate

初始有 \(a\) 个硬币,可以花费硬币开通盈利账户与非盈利账户

  • 开通盈利账户需要至少花费 \(b\) 个金币
  • 开通非盈利账户没有限制
  • 每在非盈利账户花费 \(x\) 元,盈利账户的限制 \(b\) 就减少 \(2x\)

求最大的在盈利账户上的花费

设非盈利花费 \(x\)

  • \(a-x\ge b-2x\),即 \(x\ge b-a\)
  • \(0\le x\le a\)

根据这两个条件选择最大的 \(a-x\) 值即可

#include<bits/stdc++.h>
using namespace std;
int main(){ios::sync_with_stdio(false);int t;cin>>t;while(t--){int a,b;cin>>a>>b;int tmp=2*a-b;tmp=max(0,tmp);tmp=min(a,tmp);cout<<tmp<<'\n';}
}

B.Buying Lemonade

有一些按钮和一些售货机,你知道每个售货机装的柠檬汁数量,但是你不知道哪个按钮对应哪个售货机
你可以进行如下操作

  • 选一个按钮按下去,如果这个按钮对应的售货机里还有柠檬汁,你就会得到一瓶,否则你什么都不会得到

求出买 \(k\) 瓶柠檬汁所需的最小按按钮次数

注意你可以根据售货机的情况调整结果,比如如果你按一个按钮没有得到柠檬汁,那么你就不会再按这个按钮了

\(N\le 2\times 10^5\)

模一组数据,比如 1 1 5 3 3,首先你知道所有的售货机里的柠檬汁都不少于一个,因此你应该先把每个按钮都按一次,然后你会去尝试哪个是空的,假如你足够倒霉,两个 1 都试出来了,那么你就可以确定剩下的售货机里的剩余柠檬汁都不少于 \(2\) 个,所以把每个非空的按钮按两遍,以此类推

模拟这个过程即可,排序后开桶存储

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200001];
struct node{int cnt,val;
};
vector<node>v;
signed main(){ios::sync_with_stdio(false);int t;cin>>t;while(t--){int n,k;cin>>n>>k;for(int i=1;i<=n;++i){cin>>a[i];}sort(a+1,a+n+1);v.clear();for(int i=1;i<=n;++i){if(v.empty()) v.push_back({1,a[i]});else if(v.back().val==a[i]) v.back().cnt++;else v.push_back({1,a[i]});}int tot=0,cost=0,lst=0,rem=n;for(node i:v){int tmp=(i.val-lst)*rem;if(tot+tmp>=k){cost+=k-tot;break;}tot+=tmp;lst=i.val;cost+=tmp+i.cnt;rem-=i.cnt;}cout<<cost<<'\n';}
}

C.Concatenation of Arrays

给你 \(N\) 个数对,你需要把数对首位拼接起来,最小化逆序对个数

\(N\le 10^5\)

看上去很对的假了的做法:

注意到两个数对交换对全局没有影响,因此写一个 cmp 比较两个数对拼接后的最优拼法,直接排序后输出

看上去很假的对了的做法:

将数对按最大值排序,相等则按最小值排序

不知道为啥这个对了,看上去确实是比较对,等题解出了补一下证明

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
pair<int,int> a[100001];
int c[5];
bool cmp(pair<int,int>a,pair<int,int>b){if(max(a.first,a.second)==max(b.first,b.second))return min(a.first,a.second)<min(b.first,b.second);return max(a.first,a.second)<max(b.first,b.second);
}
signed main(){ios::sync_with_stdio(false);int t;cin>>t;while(t--){cin>>n;for(int i=1;i<=n;++i){cin>>a[i].first>>a[i].second;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;++i){cout<<a[i].first<<' '<<a[i].second<<' ';}cout<<'\n';}
}

D.Skipping

P10381

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

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

相关文章

黑马JavaWeb-day01

Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 web网站的工作流程:网页由哪些部分组成:文字、图片、音频、视频、超链接 我们看到的网页背后的本质:前端代码 前端代码是如何转化成用户眼中的网页?:通过浏览器的解析和渲染转化成用户看到…

count(*)、count(1)哪个更快?面试必问:通宵整理的十道经典MySQL必问面试题

一、你是如何理解Count(*)和Count(1)的? 这两个并没有区别,不要觉得 count() 会查出全部字段,而 count(1) 不会。所以 count() 会更慢,你觉得 MySQL 作者会这么做吗? 可以很明确地告诉你们 count() 和 count(1) 是一样的,而正确有区别的是 count(字段)。如果你 count() 的…

重构案例:将纯HTML/JS项目迁移到Webpack

我们已经了解了许多关于 Webpack 的知识,但要完全熟练掌握它并非易事。一个很好的学习方法是通过实际项目练习。当我们对 Webpack 的配置有了足够的理解后,就可以尝试重构一些项目。本次我选择了一个纯HTML/JS的PC项目进行重构,项目位于 GitHub 上,非常感谢该项目的贡献者。…

最小体积拉取git仓库并保持可更新

对于超大型的git 仓库不需要提交只是拉取代码进行查看并希望保持代码更新,那么使用depth不仅能得到极小体积的仓库还能大大提速拉取时间对于超大型的git 仓库不需要提交只是拉取代码进行查看并希望保持代码更新,那么使用depth不仅能得到极小体积的仓库还能大大提速拉取时间 拉…

2024-2025-1 20241308 《计算机基础与程序设计》第四周学习总结

作业信息 这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP 这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK04 这个作业的目标 <门电路 组合电路,逻辑电路 冯诺依曼结构 CPU,内存,IO管理 嵌入式系统,并行结构 物理…

如何确认Windows电脑是否支持安装苹果系统?

Windows上安装苹果系统,无论是本地磁盘多系统共存安装还是通过虚拟机安装,不是所有电脑都支持,必须得硬件支持才行,不然会出现各种问题。以下是关于如何确认电脑是否支持安装黑苹果?的主要内容,如果未能解决你的问题,请参考其他文章: https://www.cnblogs.com一、查看硬件…

使用MySQL之创建计算字段

1. 创建计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式。下面举几个例子。如果想在一个字段中既显示公司名,又显示公司的地址,但这两个信息一般包含在不同的表列中。城市、州和邮政编码存储在不同的列中(应该这样),但邮件标签打印程序却需要把它们作为一个…

如何自动识别CAD图中所有表格数据并导出

在CAD图中自动识别并导出表格数据,是相关领域数据处理的重要需求。由于CAD图形并不像传统的电子表格那样具备明确的行列关系,表格常以线条和文本形式存在,手动提取不仅费时费力,还容易出错。如何通过自动化工具通过图形解析快速、高效地识别表格结构,提取数据并导出至Exce…